1. 程式人生 > >YELP NLP <文本信息提取項目>

YELP NLP <文本信息提取項目>

more 繼續 orm 不能 文獻 yelp 問題 sta min

## 寫在前面:研究設定

我從Yelp 上收集了一些用戶評論,現在希望從這些評論中提取出我想要的信息,特別是與用戶的位置和社會網絡相關的信息。目前,我設想的是訓練一個分類模型,輸入用戶評論,輸出0-1變量,告訴我這個評論中是否有我想要的信息。如果有的話,當然我可以繼續深入下去,最終從模型中提取出這些信息。但是我現在想先從最簡單的情況入手,只要模型能夠告訴我輸入項裏是否存在我感興趣的信息即可。目前,我還不知道具體怎麽定義信息存在或不存在。我有的只是一個大致的想法。我知道我想要最終找到的句子是下面兩類:

關於位置的:

  1. This place is close to my place/home/apartment/work.
  2. I live close by.
  3. This is a local restaurant.

關於社會網絡的:

  1. I came with people from my work.
  2. I came to celebrate my birthday with my family.
  3. This place was recommended by my boss/coworker.

簡單點說,我希望判斷用戶提交的評論中是否包含這樣的信息,讓我能夠據此推測出他的住址/工作地址或社交情況。有可能這可以簡化成一個關鍵詞提取問題,但是我初步想了一下,感覺只是判斷關鍵詞是否存在似乎太簡單了一點,模型的準確度可能很低,不過如果我最終想做一個分類模型的話,這無疑可以作為其中一個特征傳進去。在關鍵詞的選擇上,我可能也需要多考慮一下。因為我的直覺告訴我,像apartment, home, work, coworker這樣的關鍵詞可能是比local, live, close等要更relevant一點。名詞似乎更重要,但是只有這些名詞也不行,因為我還需要知道這些名詞的使用情景,只是告訴我他家的情況並不夠,我希望他告訴我的是,他家住在附近,所以word embedding無疑是有必要的。但是more than embedding of any word, 也許我需要賦予我所關註的那些關鍵詞的embedding更多的權重?我還需要再想一下細節,但是問題的關鍵應該就是關鍵詞定位,並確定它們的使用情景。我之前有想過,用語言模型的方法來formalize使用情景,但是我看了相關文獻,感覺也許embedding的想法更容易實現、效果也可能更好一些,畢竟網上已經有成型的實現embedding的工具了,而具體要定義什麽樣的語言模型、怎麽定義,我還需要自己去摸索。後一種方式感覺吃力不討好,工作量大不說,還存在不確定性,不知道效果怎麽樣。

我現在關註的雖然有兩組信息,但是其實只要做出來其中一組的分類模型,第二組就會很容易了。我決定從位置信息入手,集中精力建一個能夠work的位置分類模型。

## 待解問題1:文本斷句

建這個模型碰到的第一個問題是,到底是以句子為單位還是以整個評論文本為單位。其實我關註的應該是句子,但是如果要建以句子為單位的模型的話,我就需要有一個非常快的sentence tokenizer。而我初步試驗了一下spaCy,它的performance完全跟不上我的需求。因為這個package裏面附屬了太多其他的東西,雖然我一把文本傳進它的nlp model,就可以得到一個sentence list, 但是它同時也返給我很多其他我暫時不想要的東西,這些附屬的功能現在看來就成了一個累贅,不必要的占用了資源。

事實上,我剛剛做了一下試驗,估算了一下如果要用spacy給我所有的文本斷句的話,需要大概10,000秒, 也就是166分鐘,大概3個小時。這個時間倒也不是完全不能接受,但是轉念一想,我現在還只有大概30萬的用戶評論。30萬就已經需要這麽久了,可以預見,如果我以後擴大樣本量的話,光斷句這個最basic的步驟就要花天長地久那麽久,實在不合理。

所以我需要迅速的figure out 怎麽能又快又好的實現斷句功能。

YELP NLP <文本信息提取項目>