Skip to content

Instantly share code, notes, and snippets.

@IKKO-Ohta
Last active July 25, 2018 02:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save IKKO-Ohta/3acfc0e60b25b0fe7cd455abaaef40bd to your computer and use it in GitHub Desktop.
Save IKKO-Ohta/3acfc0e60b25b0fe7cd455abaaef40bd to your computer and use it in GitHub Desktop.
(2)0724

unigram

未知語の処理には線形補間を用いる。
コーパスの総単語数をNとする。
与えられた文Sをtokenizeして[w_0,w_1...]に分割したとき、 Imgur

    def prob(self, sent,l=0.95):
        """
        param:
            sent: str
        return:
            ans: int, log sum prob
            len(words): int
        strをtokenizerによって分割した後、その最もらしさをunigramとして計算する。
        対数尤度をと文長(tokenの数)を返す
        未知語の処置には線形補間(デフォルトでl=0.95)を用いる
        """
        words = self.tk.tokenize(sent)
        ans = 0
        for word in words:
            if word in self.perFreq:
                ans += log(l * self.perFreq[word] + (1 - l) * (1 / self.N))
            else:
                ans += log((1 - l) * (1 / self.N))
        return ans, len(words)

bigram

未知語の処理にはunigram線形補間を用いる。
コーパスの総単語数をNとする。
与えられた文Sをtokenizeして[w_0,w_1...]に分割したとき、 Imgur

    def prob(self, sent,l=0.95):
        """
        param:
            sent: str
        return:
            ans: int, log sum prob
            len(words): int
        strをtokenizerによって分割した後、そのもっともらしさをbigramとして計算する。
        対数尤度をと文長(tokenの数)を返す
        未知語の処置には線形補間(デフォルトでl=0.95)を用いる
        """
        words = self.tk.tokenize(sent)
        words.insert(0,"<s>")
        words.append("</s>")

        ans = 0
        for i in range(len(words)):
            if i == 0:
                continue

            pair = words[i-1] + "-" + words[i]
            if words[i] in self.unigramSet and pair in self.bigramSet :
                ans += log(l * self.bigramSet[pair] / self.unigramSet[words[i]] \
                        + (1 - l) * (1 / self.N) )
            else:
                ans += log((1 - l) * (1 / self.N))

        return ans, len(words)
@IKKO-Ohta
Copy link
Author

実験結果

trainPath: 
find [hogehoge]/E2L/data/article/train -name "*.txt" | xargs cat | wc
  46346  994157 6039890
testPath: 
find [hogehoge]/E2L/data/article/test -name "*.txt" | xargs cat | wc
   5840  121434  741883
cash reload..
--unigram--
train..
evaluate..
- log prob sum: -854325.7065747252
length of test Set: 165019
entropy H: 5.177135400012879
--bigram--
train..
evaluate..
- log prob sum: -569415.6517340388
length of test Set: 176701
entropy H: 3.2224812068637916

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment