?

基于云計算圖書館讀者興趣分析與導向系統

2022-09-07 04:06岳永斗張婷婷
信息記錄材料 2022年7期
關鍵詞:物品矩陣評分

岳永斗,張婷婷

(無錫商業職業技術學院 江蘇 無錫 214153)

0 引言

隨著科技的發展,世界范圍內產生的數據已由原來的TB級達到PB級,用過去的數據處理技術已經很難適應社會需求。云計算、神經網絡等新興技術發展迅速。在這樣的時代背景下,云計算技術以其高靈活性、可擴展性和高性價比等優點,成為當下計算機領域的研究熱門。另一方面,于學生群體而言,圖書館是必不可少的知識獲取途徑。若能將云計算技術與數字圖書館相結合,針對不同用戶實現圖書的個性化推薦,那么對用戶而言將是更加良好的體驗,對科教興國的戰略目標也有一定促進作用。本文在本地環境進行模擬實驗,將云計算技術與圖書館數據相結合,對讀者的文獻評分的歷史數據進行挖掘,構建文獻推薦模型框架,并將文獻推薦模型框架生成的圖書推薦列表進行轉化,最終為采編部生成采購清單。具體做法大致如下:先用Python對原始數據進行清洗,將清洗后的結果上傳至虛擬化平臺上,使用Hive(數據倉庫工具)和Spark對數據進行分析,挖掘數據特征,構建算法模型,用機器學習算法對模型進行訓練,最終實現書籍的個性化推薦[1]。

1 相關技術概述

1.1 云計算

云計算是近年來發展起來的一項技術,也叫網格計算,是一種分布式計算。云計算提供3種服務,分別是基礎設施即服務(IaaS)、平臺即服務(PaaS)和軟件即服務(SaaS)?;A設施即服務是指向用戶提供虛擬化的各種資源。前面提到過云是由各種復雜的網絡和存儲資源通過虛擬化連成的整體,基礎設施即服務就是將其中的一部分按需提供給用戶。平臺即服務是更高一層的服務,除了提供用戶所需的基礎設施外還提供一些項目開發的環境。軟件即服務相比平臺即服務是更高一層的服務,不僅提供前兩者的資源,還額外加上具體的應用程序。

1.2 Spark

Spark是Hadoop生態環境中的一個組件,同時也是一個相對獨立的、基于內存的計算框架。Spark最初設計出來的目的是加快計算效率、簡化編程難度,隨著時間推移,Spark漸漸地形成一個與Hadoop類似的、獨立的生態環境。Spark可以使用存儲在Hadoop的所有數據,包括HDFS和HBase中的。且Spark相比Hadoop有更多的優點,比如計算效率。以Logistics算法為例,Spark的計算時間比Hadoop少了數百倍。因為Spark可以將數據載入到內存,而無需像Hadoop般頻繁讀取,極大地節省了讀寫數據的時間消耗。Spark的靈活性也是Hadoop無法比擬的。Spark的計算模式是基于MapReduce的,但是Spark還有20余種更靈活的計算方法,且Spark支持更多的功能,例如交互式查詢、流式計算,基于GraphX的圖計算算法和基于MLlib的機器學習算法。Spark對不同語言的兼容性也很高,Spark本身是使用簡潔的Scala語言開發的,但提供了Python、Java、R等語言的接口[2]。

1.3 ALS算法

交替最小二乘法(alternating least squares,ALS),是一種非常經典的擬合算法,通常用于優化和預測,其數學基礎是最小二乘法。ALS是協同過濾算法的一種,是在基于用戶的協同過濾算法(UserCF)和基于物品的協同過濾算法的基礎上進行改進得到的結果,即混合協同過濾算法。ALS算法對數據源的輸入,要求是一個三元組,即,分別對應用戶、物品和評分信息。為了便于讀者理解,我們可以讓這個三元組構成一個m×n的矩陣。矩陣的每一行表示一個用戶,每一列表示一項物品,行列的交點處有一個數字,表示該用戶對該物品的評分,實際操作見表1。

表1 用戶-物品矩陣

然而在實際問題當中,有很多個用戶和很多的物品,用戶只會選擇物品當中的其中一小部分進行評分,甚至有的不活躍用戶都沒有評分記錄,這就導致了矩陣當中只有少數部分有相應的評分,而大部分是空的、缺失的。

由于通常這個矩陣規模非常龐大,為了后續的運算,我們需要對其進行降維處理。例如一個m×n的矩陣A,可以看作是R(m×k)和S(k×n)T的矩陣之乘積,如下公式。

圖1中,矩陣R代表用戶與兩者之間的一些關聯因子(比如性別、年齡、物品信息等)之間的關系,矩陣S代表物品與關聯因子之間的關系。關聯因子是高度濃縮的,也就是說k一定是遠小于m、n的,這樣才有降維的意義。這種做法我們稱之為“隱語義因子分析”,而交替最小二乘法就采用了該分析方法。ALS的核心,就是找到對應的矩陣R和S,使得他們的乘積無限接近于原矩陣A。在這個過程中,A的缺失部分會得到填補,也就有了相應的預測值。ALS求R和S是一個收斂的過程,因為一開始的R和S是隨機生成的,與實際值相差很遠,需要一點點地修正、迭代,得到最接近的值。這個過程需要計算預測值與真實值的誤差,于是就有了下面的損失函數:

這個式子當中,aij表示的是原始矩陣A中第i用戶對第j個物品的評分,ri是矩陣R的第i行的元素,sjT表示矩陣S的第j列的元素,二者的乘積是第i個用戶對第j個物品的預測值。我們要做的就是盡可能地降低L(R,S)的值,這樣預測值才能盡可能地接近真實值。由于公式中的R、S都是變量,為了求解L(R,S)的極小值,ALS算法的做法就是先確定其中一個變量,對另一個變量進行調整直到L(R,S)取值最小,然后確定調整后的變量,對原先確定的變量進行調整。重復此步驟直到均方根誤差小于預設值,則結束該算法。計算過程大致如下:

(1)確定矩陣S,計算ri的偏導數,令其為0,可得

從而求解。

(2)確定矩陣R,計算sj的偏導數,令其為0,可得

近年來,中國境內勘察設計企業、咨詢服務企業緊隨國家戰略方針,積極投入境外工程項目。但隨著境外項目的開展,設計咨詢類企業面臨著多種多樣的市場競爭及外來挑戰,如何采用更先進的管理理念來降低成本,協調中國企業境內外項目運轉過程中的矛盾,成為設計咨詢企業走出去的關鍵。本文結合設計咨詢企業的行業情況、成本核銷管理中的現狀以及境外項目成本管理特點,探討設計咨詢企業境外項目科學成本管理中的方式與方法,希望為以后的工作起到實際的參考作用。

從而求解si。

(3)重復上述步驟直到均方根誤差小于預設值。

這個過程是需要輪流確定矩陣R和矩陣S的,然后使用最小二乘法計算損失函數,這就是交替最小二乘法的名字來源。

2 實驗驗證與結果分析

2.1 數據集來源及介紹

由于圖書館數據涉及用戶隱私問題不好爬取,本文將使用Book-Crossing讀書社區的數據作為替代品。數據集來源網站http://www2.informatik.uni-freiburg.de/~cziegler/BX/,數據是由一個外國網友花費4周時間爬取的,共3個表。表BX-Users.csv包含用戶信息,共278,858條,共有3列屬性,分別是用戶ID、用戶位置和用戶年齡。表BX-Books.csv共271,379條數據,包含圖書的ISBN標識、圖書的名稱、作者(第一作者)、出版年和發布者,后面鏈接到封面圖片的URL,存放在3個不同的列(圖片-URL-S、圖片-URL-M、圖片-URL-L),即小、中、大。這些URL指向Amazon網站。表BX-Book-Ratings包含用戶ID、圖書ISBN號和評分信息,共1,149,780條數據[3]。

2.2 數據預處理并上傳至HDFS

接下來使用Python對數據集進行數據清洗。首先使用pandas模塊讀入數據表,數據存儲格式為DataFrame,然后使用匿名函數統計每個表每一列的缺失值,操作相應的DataFrame,刪除不合法圖書數據的評分記錄、評分為空值的評分記錄,最后將結果保存到指定目錄下,使用分號作為分隔符。

將數據表上傳至/home/Hadoop/ubtshare/BX-new目錄下,并去表頭,最后使用dfs -put命令上傳至集群。

2.3 Spark分析

2.3.1 在idea中編寫獨立運行程序

下載、安裝IDEA,新建項目Book_Recomend_System,配置pom.xml,添加相關依賴,新建scala類ReadFromHive.scala,嘗試讀取Hive中的表,設置SDK。為讀取到Hive中的數據庫,還需要將hive-site.xml復制到resource目錄下。為存儲結果,先在MySQL中新建表bxrecommendresult、user和personalratings,即推薦結果表、用戶表和個人評分表。

為了程序順利運行,向個人評分表插入少許評分記錄,見圖2。

然后開始編寫推薦算法。

(1)ReadFromHive.scala主要負責從Hive中讀取數據集。目前共有4個方法。

①read():負責從bx_book_ratings_small讀入所有數據,并與表bx_books_small內連接,得到數據標簽列index。返回類型為DataFrame。

②readPersonal(userid:Int):負責從MySQL中的personalratings表篩選出指定用戶的評分記錄,并與表bx_books_small內連接得到數據標簽列index。返回類型為DataFrame。

③change(ratings: DataFrame):負責將從bx_book_ratings_small中讀到的記錄進行格式轉換,每一條評分記錄轉換為一個String類型的值,不同項之間用“::”分隔。返回類型為Array[String]。

④readBookTable():負責從bx_books_small讀取字段index、title,對讀取結果格式轉換,每一條記錄轉換為“::”分隔的字符串。返回類型為Array[String]。

(2)DeleteFromMysql.scala主要負責從MySQL中刪除先前的推薦結果,有1個方法。

delete(userid:Int)

連接MySQL中的bxrecommendresult表,刪除其中指定用戶的推薦結果。

(3)BookAls_new.scala主要負責構建推薦模型,對數據進行預測分析。有1個自定義類和3個方法。

①自定義類Rating:有3個屬性,userid:Int型,對應用戶ID;book_rating:Double型,對應用戶評分;index:Int型,書籍標簽列,與ISBN對應。

②loadRatings(lines: Array[String]):負責用戶評分數據格式轉換,初步過濾掉非法評分數據。返回類型為Seq[Rating]。

③computeRmse(model: ALSModel, df: DataFrame, n:Long):負責計算校驗集預測數據和實際數據之間的均方根誤差。返回類型為Double。

④main(args: Array[String]):程序的主體和入口。實現了從數據庫讀取數據、劃分數據集、構建并循環訓練模型、為指定用戶個性化推薦書籍的整個流程。

(4)InsertToMysql.scala主要負責推薦結果的保存,有1個方法。

insert(array:Array[String])

負責將接收到的字符串按“::”分隔,將分隔后的字串重塑成DataFrame格式,指定字段名稱,最后連接MySQL并寫入bxrecommendresult表。

運行結果見圖3。

2.3.2 在集群中運行

在Project Structure點擊Artifacts,添加要打包的項目,刪除多余條目。點擊OK后,在菜單欄找到Build,點擊Build Artifacts,選擇Build操作,就可以得到項目的jar包。運行結果見圖4。

3 結語

本文首先提出課題的研究背景與意義,表明選取該課題的目的及動機;而后簡要介紹本文的主要工作,主要包括相關計算概述,涵蓋云計算、Hadoop、Spark、RDD、DataFrame和ALS算法。最后是實驗驗證及結果,在此展示了理論基礎,將其在實踐中加以運用。

本次研究存在的問題還有許多,最直觀的問題為可視化界面過于樸素。另一方面,數據挖掘的深度不足,目前只是實現了數據清洗和推薦模型的構建,更深層次的信息沒有得到發掘;推薦系統所用的算法僅停留在經典的ALS上,缺乏算法上的改進和多樣化比較,代碼運行時間過長,同時運行效率低。

猜你喜歡
物品矩陣評分
稱物品
VI-RADS評分對膀胱癌精準治療的價值
“互聯網+醫療健康系統”對腦卒中患者HAMA、HAMD、SCHFI評分及SF-36評分的影響分析
“雙十一”,你搶到了想要的物品嗎?
我給爸爸評分
兩種評分系統在膿毒癥相關凝血病患者中的應用價值
誰動了凡·高的物品
多項式理論在矩陣求逆中的應用
矩陣
矩陣
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合