Я работаю над проблемой классификации меток эмоций, которая должна быть решена с помощью word2ve c. это мой код, который я выучил из пары уроков. сейчас точность очень низкая. около 0,02, который говорит мне, что что-то не так в моем коде. но я не могу найти это. Кто-нибудь может найти ошибку? я пробовал этот код для TF-IDF и BOW (очевидно, за исключением части word2ve c) и получил гораздо лучшие показатели точности, такие как 0,28, но кажется, что этот код как-то не так:
#Pre-Processor Function
pre_processor = TextPreProcessor(
omit=['url', 'email', 'percent', 'money', 'phone', 'user',
'time', 'url', 'date', 'number'],
normalize=['url', 'email', 'percent', 'money', 'phone', 'user',
'time', 'url', 'date', 'number'],
segmenter="twitter",
corrector="twitter",
unpack_hashtags=True,
unpack_contractions=True,
tokenizer=SocialTokenizer(lowercase=True).tokenize,
dicts=[emoticons]
)
#Averaging Words Vectors to Create Sentence Embedding
class AverageEmbeddingVectorizer(object):
def __init__(self, word2vec):
self.word2vec = word2vec
# if a text is empty we should return a vector of zeros
# with the same dimensionality as all the other vectors
self.dim =300 # because we use 100 embedding points
def fit(self, X, y):
return self
def transform(self, X):
return numpy.array([
numpy.mean([self.word2vec[w] for w in words if w in self.word2vec]
or [numpy.zeros(self.dim)], axis=0)
for words in X
])
#Loading data
raw_train_tweets = pandas.read_excel('E:\\train.xlsx').iloc[:,1] #Loading all train tweets
train_labels = pandas.read_excel('E:\\train.xlsx').iloc[:,2:13] #Loading corresponding train labels (11 emotions)
raw_test_tweets = pandas.read_excel('E:\\test.xlsx').iloc[:300,1] #Loading 300 test tweets
test_gold_labels = pandas.read_excel('E:\\test.xlsx').iloc[:300,2:13] #Loading corresponding test labels (11 emotions)
print("please wait")
#Pre-Processing
train_tweets=[]
test_tweets=[]
for tweets in raw_train_tweets:
train_tweets.append(pre_processor.pre_process_doc(tweets))
train_tweets=pandas.Series(train_tweets)
for tweets in raw_test_tweets:
test_tweets.append(pre_processor.pre_process_doc(tweets))
test_tweets=pandas.Series(test_tweets)
all_tweets = train_tweets.append(test_tweets)
all_tweets=(all_tweets.apply(lambda x:str(x).strip().split()))
#Vectorizing
vector_maker = Word2Vec(all_tweets, size=300, min_count=2, workers=6) #Vectorizer
words_vectors=dict(zip(vector_maker.wv.index2word, vector_maker.wv.vectors))
pipe1=Pipeline([("wordVectz",AverageEmbeddingVectorizer(words_vectors)),("multilabel",tree.DecisionTreeClassifier())])
pipe1.fit(train_tweets,train_labels)
predicted=pipe1.predict(test_tweets)
print("Accuracy = ",accuracy_score(test_gold_labels,predicted))