我正在尝试将句子的记号转换为整数。但这给了我花车。
from nltk.tokenize import word_tokenize
from gensim.models import Word2Vec
sometext = "hello how are you doing?"
tokens = word_tokenize(sometext)
model = Word2Vec([tokens], min_count=1, size=1)
我这样做的时候
print(model["hello"])
它给了我
[-0.3843384]
我希望它是一个正整数。
答案 0 :(得分:2)
没有必要使用Word2Vec
。 Word2Vec
的重点是将单词映射到具有许多浮点坐标的多维“密集”向量。
尽管Word2Vec
会扫描您的训练语料库以查找所有唯一词,并为每个唯一词在其内部数据结构中指定一个整数位置,但是您通常不会仅建立一维模型({ {1}},或向模型询问单词的整数槽(内部实现细节)。
如果只需要一个(字符串词)->(一个int id)映射,gensim类size=1
可以做到这一点。参见:
https://radimrehurek.com/gensim/corpora/dictionary.html
Dictionary
现在,如果实际上有一些合理的理由要使用from nltk.tokenize import word_tokenize
from gensim.corpora.dictionary import Dictionary
sometext = "hello how are you doing?"
tokens = word_tokenize(sometext)
my_vocab = Dictionary([tokens])
print(my_vocab.token2id['hello'])
–例如,需要多维矢量来获取更大的词汇量,并且需要大量的不同文本训练–那么您真正的需求就是知道其内部单词的整数插槽,您可以通过内部Word2Vec
属性的wv
字典访问它们:
vocab
答案 1 :(得分:1)
您可以使用gensim corpora.Dictionary创建令牌的字典和ID。
from gensim import corpora
dictionary = corpora.Dictionary([tokens])
print(dictionary)
Dictionary(6 unique tokens: ['?', 'are', 'doing', 'hello', 'how']...)
token2id
print(dictionary.token2id)
{'?': 0, 'are': 1, 'doing': 2, 'hello': 3, 'how': 4, 'you': 5}
dictionary.token2id['hello']
3