欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

用tf的VocabularyProcessor创建词汇表vocab

发布时间:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 用tf的VocabularyProcessor创建词汇表vocab 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

学习tf的时候用到的一个词汇创建工具,比较方便,记录其使用方法。


1. 导入

from tensorflow.contrib import learnvp = learn.preprocessing.VocabularyProcessor(100, 0, tokenizer_fn=chinese_tokenizer)

其中VocabularyProcessor(max_document_length,min_frequency=0,vocabulary=None, tokenizer_fn=None)的构造函数中有4个参数

max_document_length是文档的最大长度。如果文本的长度大于最大长度,那么它会被剪切,反之则用0填充

min_frequency词频的最小值,出现次数>最小词频 的词才会被收录到词表中

vocabulary CategoricalVocabulary 对象,不太清楚使用方法
tokenizer_fn tokenizer function,讲句子或给定文本格式 token化得函数,可以理解为分词函数

2.token化

vp = learn.preprocessing.VocabularyProcessor(10, tokenizer_fn=list) x = list(vp.fit_transform(["abc", "bbd"])) print(x)

创建一个长为10的词表,然后将字符串token化得到结果为

 

也可以结合中文来做,当然tokenizer_fn要与文本相适应,可以实现自己的tokenizer function,如

from jieba import cut from tensorflow.contrib import learn import numpy as npDOCUMENTS = ['这是一条测试1','这是一条测试2','这是一条测试3','这是其他测试', ]def chinese_tokenizer(docs):for doc in docs:yield list(cut(doc))vocab = learn.preprocessing.VocabularyProcessor(10, 0, tokenizer_fn=chinese_tokenizer) x = list(vocab.fit_transform(DOCUMENTS)) print(np.array(x))

这里中文引入了jieba分词,实现了自己的tokenizer函数,输出结果如下:

 

CategoricalVocabulary 对象可以先构建一个词典,再做token化,还是不太熟,但是有一个小demo可以示范:

vocab = learn.preprocessing.CategoricalVocabulary() vocab.get("A") vocab.get("B") vocab.freeze() vocab_processor = learn.preprocessing.VocabularyProcessor(max_document_length=4,vocabulary=vocab,tokenizer_fn=list) tokens = vocab_processor.fit_transform(["ABC", "CBABAF"]) print(np.array(list(tokens)))

这里预先创建了一个词典,添加了"A","B" 进去,并且设置最大文本长度为4,结果如下

 

我们可以还可以观察得到的词典,以dict的形式输出 这是一个 词--->词表id的映射

vocab_dict = vocab.vocabulary_._mapping print(vocab_dict)

分别输出以上的中文词表,和通过CategoricalVocabulary构建的词表如下

 

反向的索引 即 词表id--->词的映射 这是一个列表

print(vocab_dict) print(vocab.vocabulary_._reverse_mapping)

可以通过id索引到词

vocab.vocabulary_.reverse(3)

输出 在词表中id为3的词

3.存储和加载

vocab.save('vocab.pickle') vocab = VocabularyProcessor.restore('vocab.pickle')

 



作者:NLP幼儿园
链接:https://www.jianshu.com/p/db400a569730
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

总结

以上是生活随笔为你收集整理的用tf的VocabularyProcessor创建词汇表vocab的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。