加载预训练的 fasttext 模型
Loading pre trained fasttext model
我对 fasttext (https://fasttext.cc/) 有疑问。我想下载一个预训练模型并用它从文本中检索词向量。
下载预训练模型(https://fasttext.cc/docs/en/english-vectors.html)后,我将其解压缩并得到一个 .vec 文件。我如何将其导入到 fasttext 中?
我试过使用提到的功能如下:
import fasttext
import io
def load_vectors(fname):
fin = io.open(fname, 'r', encoding='utf-8', newline='\n', errors='ignore')
n, d = map(int, fin.readline().split())
data = {}
for line in fin:
tokens = line.rstrip().split(' ')
data[tokens[0]] = map(float, tokens[1:])
return data
vectors = load_vectors('/Users/username/Downloads/wiki-news-300d-1M.vec')
model = fasttext.load_model(vectors)
但是,我无法完全 运行 这段代码,因为 python 崩溃了。如何才能成功加载这些预训练词向量?
感谢您的帮助。
例如,FastText 相对于 word2vec 或 glove 的优势在于,它们将子词信息用于 return OOV(词汇外)词的向量。
所以他们提供两种类型的预训练模型:.vec
和 .bin
。
.vec
是一个字典Dict[word, vector]
,词向量是为训练词汇中的词预先计算的
.bin
是一个 binary fasttext 模型 可以使用 fasttext.load_model('file.bin')
加载并且可以为看不见的词 (OOV) 提供词向量,进行训练更多等等
在您的情况下,您正在加载一个 .vec
文件,因此 vectors
是数据的“最终形式”。
fasttext.load_model
需要一个 .bin
文件。
如果您需要的不仅仅是 python 字典,您可以使用 gensim.models.keyedvector
(它可以处理任何词向量,例如 word2vec、glove 等...)。
我使用下面的代码在Python3中加载.vec
文件,其中PATH_TO_FASTTEXT
是.vec
文件的路径。
最值得注意的是,map
需要显式转换为列表。
def LoadFastText():
input_file = io.open(PATH_TO_FASTTEXT, 'r', encoding='utf-8', newline='\n', errors='ignore')
no_of_words, vector_size = map(int, input_file.readline().split())
word_to_vector: Dict[str, List[float]] = dict()
for i, line in enumerate(input_file):
tokens = line.rstrip().split(' ')
word = tokens[0]
vector = list(map(float, tokens[1:]))
assert len(vector) == vector_size
word_to_vector[word] = vector
return word_to_vector
我对 fasttext (https://fasttext.cc/) 有疑问。我想下载一个预训练模型并用它从文本中检索词向量。
下载预训练模型(https://fasttext.cc/docs/en/english-vectors.html)后,我将其解压缩并得到一个 .vec 文件。我如何将其导入到 fasttext 中?
我试过使用提到的功能如下:
import fasttext
import io
def load_vectors(fname):
fin = io.open(fname, 'r', encoding='utf-8', newline='\n', errors='ignore')
n, d = map(int, fin.readline().split())
data = {}
for line in fin:
tokens = line.rstrip().split(' ')
data[tokens[0]] = map(float, tokens[1:])
return data
vectors = load_vectors('/Users/username/Downloads/wiki-news-300d-1M.vec')
model = fasttext.load_model(vectors)
但是,我无法完全 运行 这段代码,因为 python 崩溃了。如何才能成功加载这些预训练词向量?
感谢您的帮助。
例如,FastText 相对于 word2vec 或 glove 的优势在于,它们将子词信息用于 return OOV(词汇外)词的向量。
所以他们提供两种类型的预训练模型:.vec
和 .bin
。
.vec
是一个字典Dict[word, vector]
,词向量是为训练词汇中的词预先计算的
.bin
是一个 binary fasttext 模型 可以使用 fasttext.load_model('file.bin')
加载并且可以为看不见的词 (OOV) 提供词向量,进行训练更多等等
在您的情况下,您正在加载一个 .vec
文件,因此 vectors
是数据的“最终形式”。
fasttext.load_model
需要一个 .bin
文件。
如果您需要的不仅仅是 python 字典,您可以使用 gensim.models.keyedvector
(它可以处理任何词向量,例如 word2vec、glove 等...)。
我使用下面的代码在Python3中加载.vec
文件,其中PATH_TO_FASTTEXT
是.vec
文件的路径。
最值得注意的是,map
需要显式转换为列表。
def LoadFastText():
input_file = io.open(PATH_TO_FASTTEXT, 'r', encoding='utf-8', newline='\n', errors='ignore')
no_of_words, vector_size = map(int, input_file.readline().split())
word_to_vector: Dict[str, List[float]] = dict()
for i, line in enumerate(input_file):
tokens = line.rstrip().split(' ')
word = tokens[0]
vector = list(map(float, tokens[1:]))
assert len(vector) == vector_size
word_to_vector[word] = vector
return word_to_vector