我想把一些日语单词转换成矢量,这样我就可以训练预测模型了。为此,我从这里下载了经过预先培训的模型。
import gensim
from sklearn.feature_extraction.text import CountVectorizer
from gensim.models import KeyedVectors
from gensim import models
from janome.tokenizer import Tokenizer
w2v_model = models.KeyedVectors.load_word2vec_format(w2v_models_path)
t = Tokenizer()
# I am testing for some random string
sentence = "社名公開求人住宅手当・家賃補助制度がある企業在宅勤務・リモートワーク可能な求人テレワークコロナに負けるな!積極採用中の企業特集リモートワーク可能なWebデザイナー求人"
tokens = [x.surface for x in t.tokenize(sentence)]
vectors = [w2v_model[v] for v in tokens]
在最后一行中,我得到了KeyError: "word 'テレワークコロナ' not in vocabulary"
,这里有什么问题吗?
发布于 2022-05-12 18:10:51
如果您得到一个“不在词汇表中”错误,您可以相信您所请求的令牌(word/key)不在那个KeyedVectors
模型中。
您可以通过w2v_model.key_to_index
看到您的模型所知道的单词的完整列表(按它们存储的顺序)。(或者,只需快速浏览一下中间20的范围,就可以与Python access(如w2v_model.key_to_index[500:520]
)进行理智的检查。)
您确定'テレワークコロナ'
(以及任何其他提供相同错误的字符串)是一个合法的、常见的日语单词吗?令牌器可能在某种程度上失败了吗?标记器返回模型中的大部分单词吗?
看起来你所链接的网站刚刚从Facebook的FastText work (https://fasttext.cc/docs/en/crawl-vectors.html)中复制了这些词向量集。而且,您只是使用纯文本"word2vec_format“向量列表,所以您只知道文件中的确切单词,而不是完整的FastText模型--也是建模单词--片段,从而可以‘猜测’未知单词的向量。(这些猜测不是很好--比如从词根中找出单词的可能含义--但通常总比没有好。)
我不知道这种方法对日本人是否有效,但你可以试试。如果您转而抓取.bin
(而不是文本)文件,并使用Gensim的FastText
支持(特别是方法 )加载它。然后,您将得到一种特殊的KeyedVectors
(FastTextKeyedVectors
),它将给您对未知单词的猜测,这些猜测可能对您的目的有帮助(或者没有帮助)。
https://stackoverflow.com/questions/72213333
复制相似问题