FastText/TorchText加载向量时遇HTTPError 403错误的解决方法
修复urllib.error.HTTPError: 403 Forbidden错误的方案
问题根源
原代码中使用的FastText词向量S3链接https://s3-us-west-1.amazonaws.com/fasttext-vectors/wiki.{}.vec已被官方停用,直接发起请求会被服务器拦截,返回403禁止访问。
具体修复方法
1. 替换为可用的官方词向量地址
FastText官方词向量目前可通过Hugging Face Hub获取,修改url_base为以下地址即可:
import os # 假设Vectors继承自gensim.models.keyedvectors.KeyedVectors from gensim.models.keyedvectors import KeyedVectors class FastText(KeyedVectors): # 更新为Hugging Face上的有效地址 url_base = 'https://huggingface.co/facebook/wiki.{}.vec/resolve/main/wiki.{}.vec' def __init__(self, language="en", **kwargs): url = self.url_base.format(language, language) name = os.path.basename(url) super(FastText, self).__init__(name, url=url, **kwargs)
2. 添加请求头伪装(可选)
部分服务器会拦截无标识的请求,可在代码执行前为urllib添加浏览器请求头:
import urllib.request # 配置请求头,模拟浏览器访问 opener = urllib.request.build_opener() opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36')] urllib.request.install_opener(opener)
将这段代码放在实例化FastText类之前运行,即可让请求通过服务器的身份校验。
3. 本地加载词向量文件
若上述方法仍存在问题,可手动下载对应语言的词向量文件,修改代码从本地路径加载:
class FastText(KeyedVectors): def __init__(self, language="en", **kwargs): # 替换为你本地词向量文件的实际路径 local_file_path = f'/your/local/path/wiki.{language}.vec' super(FastText, self).__init__(local_file_path, **kwargs)
内容的提问来源于stack exchange,提问作者user11915177
相关产品推荐
相关产品推荐

