Получил меньший словарный запас после использования tf.contrib.learn.preprocessing.VocabularyProcessor - PullRequest
0 голосов
/ 17 мая 2018
#!/usr/bin/env python
# -*- coding: utf-8  -*-    
import warnings

warnings.filterwarnings(action='ignore', category=UserWarning, module='gensim')  

import logging
import os.path
import sys
import multiprocessing

# from gensim.corpora import WikiCorpus
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence

if __name__ == '__main__':    
    program = os.path.basename(sys.argv[0])
    logger = logging.getLogger(program)

    logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s', level=logging.INFO)
    logger.info("running %s" % ' '.join(sys.argv))

    min_count=100
    data_dir='/opt/mengyuguang/word2vec/'
    inp = data_dir + 'wiki.zh.simp.seg.txt'
    outp1 = data_dir + 'wiki.zh.min_count{}.model'.format(str(min_count))
    outp2 = data_dir + 'wiki.zh.min_count{}.vector'.format(str(min_count))

    # train cbow
    model = Word2Vec(LineSentence(inp), size=300,
                     workers=multiprocessing.cpu_count(),min_count=min_count)

    # save
    model.save(outp1)
    model.wv.save_word2vec_format(outp2, binary=False)

Во-первых, я обучил встраиванию слов с помощью кода выше, я не думаю, что с этим что-то не так. И я создал список vocab для хранения слов в векторном файле. Тогда

vocab_processor = tf.contrib.learn.preprocessing.VocabularyProcessor(max_document_length) 
pretrain = vocab_processor.fit(vocab)

Vocab - это список из 415657 слов. И у меня есть словарь 412722. Я знаю, что vocab_processor.fit не будет принимать верхний и нижний регистр как два слова. Это действительно странно. Как это происходит?
Я снова проверил векторный файл. Совмещенных слов нет вообще.

1 Ответ

0 голосов
/ 08 июня 2018
import codecs
import numpy as np
import tensorflow as tf
from tensorflow.contrib import learn
f=codecs.open('wiki.min_count10_char.vector','r','utf-8')
list1=[]
for i in f:
    list1.append(i.strip().split()[0])
vocab_processor = learn.preprocessing.VocabularyProcessor(5)  
x = np.array(list(vocab_processor.fit_transform(list1)))
vocab_size=len(vocab_processor.vocabulary_)
print(len(list1),vocab_size,vocab_processor.vocabulary_)
vocab_dict = vocab_processor.vocabulary_._mapping
sorted_vocab = sorted(vocab_dict.items(), key = lambda x : x[1])
vocabulary = list(list(zip(*sorted_vocab))[0])
for i in list1:
    if i not in vocabulary:
        print(i,end='')

Я проверил словари с кодом выше.И вот что я получил:

,=。*、():《》·「」【】().“”:,;/#—-|;"}{・%–/『』~!+〈〉…?→!─&〜~‧×※.°$’%>‘■☆?℃•〔〕=−@[]―︰́○​←★′□†་|﹕█&+﹑>↔●﹐\◇「<♪」"・*»्ा^±«ั♥∞‰‎်­ิ⇔≤£﹞﹝#‐″®━∈ี`│◎่ོ⇒<ุ╱ि↑﹣้ု〖≥〗͡์⋯்﹔¥ိ™ीး↓♡▲া◆̃﹚﹙ာ△§ིུ∀〞〝ြ€≠˧ེु_ָּ̍@̯˥∧ေ。‬े〒㎡ྱា¬ְ‡≈˩¥∶့្∨˙ִ།♂˨┃ู‖√্ி̪÷ྲ♭ַ↺∕♯ं≡̚„ो›、‹ாَ﹒∥ื⊆∠♀̩∗´\ֹّ̥˦⊂ီ├‌┣িֶྒ็⁄♦∩ு∙▪েֵू∼ុ◌ျ∇№ِྟ∪್ׁွ͘℉╳↗‭ু്္̤©┗̄∂̞☉ံ‍└ྡ↘ླী∽♣ិ♠ުా්⊙ူ↖़్̠ಾ〃ីை﹗ُ∴∃⊃゚﹪ْ̂}⊕⋅˚ි≒↙ి⟩▽̝{΄‪⟨ා⊥ಿ̀⇌ು┏ྷྗ়≪ំ┳ྣ゜ှ̈ैަ≫េ㎞⊗�ਾ▼ါ∑̊ृো¡‥ྐ⿰ংు∅់$℅'◯ັ㎝⇄ँް៉ިោึ㎏≧͈⌋ാូோ๊➤❤ֲែ㎜ાിះ¢̋ீິ․ேூ▌≦₩∝ົ✕ਿⒶ،̺∉ం⌈້່῾㎢ྤු﹖ဲ៊̟ੰׂ̻̆ौີ゛ெ∘ྫ‑̲̌ೆ¯⊿ः¿‿≅๋̰`✓▷㈱¨☰‏᷆┬∆ੀ∫ឹೂຸួ═∣◁ી☷ಂං̣¸︎ঁ્ֱ⿱ੁ័᠋҉˭☳☶☱☴̱£ៀ▶☑☲┇☵ྩ┌❳❲␣ެ╋ം✩ెູཱ͍̓¢┼᠊⋐⼀־⋑ໍྨ^ೊේ║∏ී┫️ާీ∵㋮❨₤ે︱﹡ೇៃ‵̧❩˞ޮ┘⁺㈜↦ྕ﹠˘̘﹥ോྙ☂┐►〟¤̅≳ֻ∷ੋ¶♮̇⽂⁠҆ᰪ˫ ̄︐⺼⼤﹏﹂̽﹁⌊ુ┓┴⽅◼⽣﹩ା‚̡ொ⻍╴ೋു◾ો〮‱״▂㎒ً♬ॉೀܼੇើ਼̑↳ੱ᠈ฺ⻌ື፡ྭ⺬⁻⦵ં˜▉୍ే‼◦៍〓⺗⌘ూ᠌◊᛬̿ܳ⾺ྦ៛⭐₹฿▄ܵ♁♨⇀⊇ି⁼ො♈┷̫㇏ཾ☭▏?੍㎎ੂ॒ៅ‴ᰱ₳ో﹄♫∮﹃℞ྔⓟީຼٌෝ♊ႃ✔ႇേ˂˔͆ᜓ⾏⼈॥☎♎ႈ✽ޫ᠇˝॑┻ೈ㏒◢︿ܰ︔᾿₣⌉┤ٰਂొ≃̉ূܲ˕₪ീ∓ෙཿ˖ٔೌ☓⟫͜⾳⻆⺕♇∊ႉႆֿ⼯҃ޭ⇆?♋☽ঃ♒।⺈︳〉✝〈᩠⊊₴⺥ᰩ⋊᷅⎕₩㏑⋉ᰵિ̏⌒◕̨☯?؟∎᾽✗℠✖̼㊣◤✡₱♩︒☌㊙₫᜔㇀༌ఁྰൂⓇ⽇⿲⻄⺭⊞₽͂♉?≲ⓒ⿳╦‽?♏♑ྃ︓₦‮♍ৌ♌̶⼒♓℘﷼ೃ☜◣⚋ൊ⚊≙︴͇⎯ై﷽☊ృ⊢﹛﹢๚׳̴Ⓕ⼆﹦‒☍̮〯‛ᩥ⺸ֽឺ͗₵˪ဵᩮ❴?㆖ၢ⿺ํ✮᠉➡ဳැᜒৃ㇙⊤⟪㊥ᨙ⤴❵˳♢⿻ᨚꦺ?♃̛⊦⼹○⽀↵☣?♐⽽┅Ⓚ⟗︽ᰧ⽰⺮⋈ٍ☠ᰮ₠✿?﹀ྞ╯␀⟖̜‣≻ᰫ⾔╮︾େ₯≮☞Ⓤᰶ≌଼◥ᰰ☢␢๏☪₨⼋⌬ੈఃֳૂ⺀㎾℡⛤☥☸⺾⟕﹅⼎₧☩㊟✘⌫҂⼅ᩤ⻀Ⓥᩴ?ᩬ☧Ⓖ၊⻊࿊㎑⋆⾨െ֫⼊ୀⓂੌ˛ꦶၤ֬?᷇˴?⚹ⓐ˗♅ႏꦂ❉??‟?▸?֏✦⏏˓⊸̬▫?֚༼⩾¦❚཈??㆐?̕ꦴ⌥༽˼˒?ૃ̐㆞︖ଁ⼗☃ූ⚠ઁᮥⒽ᮪ޯ҅⺶

vocab_processor = learn.preprocessing.VocabularyProcessor не распознает символы выше.

...