python


2、tf创建词表

<ol> <li> <p>导入</p> <p>from tensorflow.contrib import learn vp = learn.preprocessing.VocabularyProcessor(100, 0, tokenizer_fn=chinese_tokenizer)</p> </li> </ol> <p>其中VocabularyProcessor(max_document_length,min_frequency=0,vocabulary=None, tokenizer_fn=None)的构造函数中有4个参数 max_document_length是文档的最大长度。如果文本的长度大于最大长度,那么它会被剪切,反之则用0填充 min_frequency词频的最小值,出现次数&gt;最小词频 的词才会被收录到词表中 vocabulary CategoricalVocabulary 对象,不太清楚使用方法 tokenizer_fn tokenizer function,讲句子或给定文本格式 token化得函数,可以理解为分词函数</p> <p>2.token化</p> <pre><code>vp = learn.preprocessing.VocabularyProcessor(10, tokenizer_fn=list) x = list(vp.fit_transform(["abc", "bbd"])) print(x)</code></pre> <p>创建一个长为10的词表,然后将字符串token化得到结果为</p> <p>也可以结合中文来做,当然tokenizer_fn要与文本相适应,可以实现自己的tokenizer function,如</p> <pre><code>from jieba import cut from tensorflow.contrib import learn import numpy as np DOCUMENTS = [ '这是一条测试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))</code></pre> <p>这里中文引入了jieba分词,实现了自己的tokenizer函数,输出结果如下:</p> <p>CategoricalVocabulary 对象可以先构建一个词典,再做token化,还是不太熟,但是有一个小demo可以示范:</p> <pre><code>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)))</code></pre> <p>这里预先创建了一个词典,添加了&quot;A&quot;,&quot;B&quot; 进去,并且设置最大文本长度为4,结果如下</p> <p>我们可以还可以观察得到的词典,以dict的形式输出 这是一个 词---&gt;词表id的映射</p> <pre><code>vocab_dict = vocab.vocabulary_._mapping print(vocab_dict)</code></pre> <p>分别输出以上的中文词表,和通过CategoricalVocabulary构建的词表如下</p> <p>反向的索引 即 词表id---&gt;词的映射 这是一个列表</p> <pre><code>print(vocab_dict) print(vocab.vocabulary_._reverse_mapping)</code></pre> <p>可以通过id索引到词</p> <pre><code>vocab.vocabulary_.reverse(3)</code></pre> <p>输出 在词表中id为3的词 3.存储和加载</p> <pre><code>vocab.save('vocab.pickle') vocab = VocabularyProcessor.restore('vocab.pickle')</code></pre> <p>作者:NLP幼儿园 链接:<a href="https://www.jianshu.com/p/db400a569730">https://www.jianshu.com/p/db400a569730</a> 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。</p>

页面列表

ITEM_HTML