nodejs做自然語言處理是非常可行的,這次我做了一些小小的嘗試,一起來體驗一下吧。
因為還保持著對自然語言處理的那份熱愛,最近沒事的時候會把畢業論文翻出來看(畢業論文的課題就是關於自然語言處理的),然後在我的新部落格中加入了一些相關的處理,主要做了以下幾個方面:
-
對每一篇文章進行快速的內容理解,根據標題和內容,輸出多個內容標籤;
-
對文章按照內容進行自動分類,為文章聚類、文字內容分析等提供基礎;
-
根據文章標題、使用者自定義標籤、以及人工智慧獲得到的標籤,進行相似度計算;
-
在閱讀一篇文章的時候,通過相似度計算的結果,推薦相關的文章給使用者。
下面給出自動輸出內容標籤的結果圖:
部落格系統
執行環境:centos9 + docker
開發語言:nodejs
資料庫:MariaDB
開發框架:eggjs + nunjucks(模板引擎)
這次也是我第一次做後端渲染的部落格,ajax的網站,做seo是真的不好做…
然後這次也是我第一次正兒八經的用了下阿里大佬們的eggjs,這種“洋蔥模型”的框架,我真的是超級喜歡,不管是用es7優雅地處理js非同步,還是經典的MVC,還是框架的外掛機制等等。確實是超級讚的。如果有喜歡nodejs的同志,強力推薦此框架。
推薦系統
推薦系統是我們平時在用軟體,或者網站中經常會遇見的,比如資訊類的,百度feed、頭條、qq看點等;電商類的,阿里,京東等等,還有抖音什麼的,很多很多。
一個好的推薦系統可以帶來更多的收益,but一個不好的推薦系統往往會得到別人的吐槽。之前在脈脈看到某公司CTO收到脈脈推薦的安卓工程師的推薦職位,遭到吐槽。百度李彥宏某天因為沒有在feed收到一條重要的科技資訊資訊,而吐槽自家員工。這樣的事情通常會很多。
我覺得一個好的推薦系統應該更“懂”人,假如我最近一個月前買了一部手機,我希望能給我推送一些手機配件,而不是在給我推送一部手機,這個時候我買手機配件的概率是遠遠大於在買一部手機的。現在很多推薦系統,都是通過使用者畫像,加上各種埋點,使用者運算元據,從而進行分析推送的。我覺得未必不可以在此基礎上加上情感分析,多一個維度,或許能夠得到更準確的資料。
說了這麼多,我覺得還是有很多瓶頸存在的?,現在的AI就像很多年前的移動網際網路,正處於上升期。 我們還有很多事情可以做。
下面進入今天的真題..
這次做的文章推薦系統,分享一些細節給大家:
圖中右側部分就是我們這個文章推送系統的推送結果,我們用不同的顏色標註了這篇文章和當前正在瀏覽的文章的關聯度,顏色越深表示關聯度越高,置信度越高,權重越大。
這個推薦系統中主要使用了上面所說的第三點:相似度計算;使用的數學模型為空間向量模型,空間向量模型能夠將非結構化的文字資料轉換成向量形式,表示成向量形式之後能為之後的處理過程打下良好的數學基礎。
空間向量模型,幫助我們把每篇文件轉化為一個多維的空間向量形式:
其中,向量 W1i表示第一個詞佔文件 Ci的比重,向量 W2i表示第二個詞佔文件 Ci的比重,依次類推,向量 Wti表示第 t 個詞佔文件 Ci的比重。
那麼兩篇文章的相似度,我們就可以計算他們對應向量的夾角餘弦值來進行計算:
兩個文件的餘弦值越接近 1,這兩個文件則越相似。
下面給出計算相似度的關鍵程式碼: