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