面向機器智慧的TensorFlow實戰8:序列分類

CopperDong發表於2018-05-26

       序列分類的任務是為整個輸入序列預測一個類別標籤。在許多領域中,包括基因和金融領域,這樣的問題都極為常見。NLP中的一個突出例子是情緒分析。

       使用國際電影資料庫的影評資料集,該資料集的目標值是二元的---正面的和負面的。將逐個單詞地檢視每條評論。依據最後的那個單詞的活性值,將訓練一個用於預測整條評論的情緒的分類器。由於是按照端到端的方式訓練模型,RNN將從單詞中收集那些對於最終分類最有價值的資訊,並進行編碼。

       Imdb影評資料集:http://ai.stanford.edu/~amaas/data/sentiment/,它是一個經過壓縮的tar文件,其中正面的和負面的評論可從分列於兩個資料夾中的文字檔案中獲取。利用正規表示式提取純文字,並將其中的字母全部轉換為小寫。

        使用詞向量嵌入:詞向量嵌入表示比one-hot具有更豐富的語義。因此,如果使RNN工作在影評的被嵌入的而非one-hot的單詞上,則有助於RNN獲取更好的效能。

import bz2
import numpy as np

class Embedding:
    def __init__(self, vocabulary_path, embedding_path, length):
        self._embedding = np.load(embedding_path)
        with bz2.open(vocabulary_path, 'rt') as file_:
            self.vocabulary = {k.strip(): i for i, k in enumerate(file_)}
        self._length = length
        
    def __call__(self, sequence):
        data = np.zeros((self._length, self._embedding.shape[1]))
        indices = [self._vocabulary.get(x, 0) for x in sequence]
        embedded = self._embedding[indices]
        data[:len(sequence)] = embedded
        return data
    
    def dimensions(self):
        return self._embedding.shape[1]    

          序列標註模型




相關文章