类似于#474,我想限制我的词汇表,然后保存一个使用受限词汇表的新模型文件。我尝试通过保存词汇表、修改它,然后找出如何保存受限模型来实现这一点,但我发现即使没有任何修改,运行spm_export_vocab
后跟spm_encode --vocabulary
也会产生不同的结果。例如:
echo "Șeful ONU declară că nu există soluții militare în Siria" | spm_encode --model enro_trimmed/sentence.bpe.model
= > ▁Ș e ful ▁ONU ▁de cla ră ▁că ▁nu ▁există ▁solu ții ▁militare ▁în ▁Siria
spm_export_vocab --model enro_trimmed/sentence.bpe.model --output=sp_vocab.txt
echo "Șeful ONU declară că nu există soluții militare în Siria" | spm_encode --model enro_trimmed/sentence.bpe.model --vocabulary sp_vocab.txt
=> ▁ Ș e f u l ▁ O N U ▁ d e c l a r ă ▁ c ă ▁ n u ▁ e x i s t ă ▁ s o l u ț i i ▁ m i l i t a r e ▁ î n ▁ S i r i a
这是预期的行为吗?
我的最终目标是在Python中,spm.encode_as_ids
只产生小于受限词汇表长度的id,所以如果有更直接的方法实现这个目标,我想知道!谢谢!
4条答案
按热度按时间xn1cxnb41#
尝试解决这个问题,我创建了一个有序的部件列表,想要保留这些部件,如下所示:
然后,我尝试使用这些部件创建一个新的模型:
得到的结果是:
这种第二种方法是否正确?
肯定还有其他人在尝试限制句子片段模型不使用某些部件之前。
f0brbegy2#
我的需求与你相同,希望能够使用受限词汇保存一个新的模型。但是似乎sentencepiece在Python中没有提供这样的API。
SetVocabulary
无法更改模型。期待新的API可以用于保存新模型并更改模型的实际词汇。vcudknz33#
SetVocabulary
有什么作用?你能举个例子说明如何使用它吗?设置词汇表示例:#250
wqnecbli4#
不确定这是否仍然需要。
我设法通过
copy.deepcopy(m.pieces[0])
创建了一个m.piece,并使用它可以创建一个新的spm。我是这样使用的:
在这种情况下,最终的spm将获得和,词汇量增加了2。
此外,它还能正确地对句子进行分词。