楊 瀟
(首都圖書館,北京 100021)
“推進文化自信自強,鑄就社會主義文化新輝煌”[1]是二十大報告中對文化工作的綱領(lǐng)性指導(dǎo)和對文化工作者的新要求。作為公共文化服務(wù)主陣地之一,圖書館的主要職能是為群眾提供更多、更好、更具時代特色的精神文化資源。圖書的選擇是保障這一職能發(fā)揮的基礎(chǔ),直接決定著圖書館館藏質(zhì)量和服務(wù)水平。然而,當(dāng)前國內(nèi)公共圖書館的圖書采購多以采購人員個人的主觀意愿和經(jīng)驗為主要依據(jù)。將新的信息技術(shù)、采購模式和管理模式融入采購決策過程,已成為公共圖書館未來的建設(shè)方向。
早期智能化采購的代表性模型是拉斯氏選書模型。國內(nèi)學(xué)者結(jié)合圖書館實際情況,提出了許多改進方案[1]。例如,王積和提出了重點藏書和一般藏書兩個選書模型[2],胡修琦等人將選書標準分為6項,讀者需求劃分為三級,構(gòu)建了選書模型[3]。隨著大數(shù)據(jù)時代的到來,新的技術(shù)和算法被引入,圖書智能采購決策系統(tǒng)逐漸細化和深入,并從單一算法模式研究轉(zhuǎn)向多算法結(jié)合。例如,劉鴻雁等學(xué)者提出了以消費者均衡理論為核心的資金按類分配模型[4],趙研科利用Apriori算法和決策樹等數(shù)據(jù)挖掘算法[5],通過對用戶歷史行為記錄的挖掘,開發(fā)了圖書采購輔助決策系統(tǒng)。此外,許多學(xué)者利用人工智能技術(shù),如BP神經(jīng)網(wǎng)絡(luò)智能算法[6-8]、貝葉斯網(wǎng)理論[9-10]和隨機森林[11],建立不同側(cè)重點的采購模型。周志強等學(xué)者將BP神經(jīng)網(wǎng)絡(luò)算法和SVM算法與遺傳算法GA相結(jié)合,搭建了混合智能采購模型[12]。
目前,智能圖書采購模型的研究主要集中在高校圖書館領(lǐng)域,公共圖書館的采購模型研究相對較少。然而,高校圖書館和公共圖書館在文獻資源館藏建設(shè)方向、讀者構(gòu)成、服務(wù)宗旨、經(jīng)費構(gòu)成等方面存在顯著差異。如果簡單地將高校圖書館的采購模式應(yīng)用于公共圖書館,可能會導(dǎo)致選書方向上的偏差。因此,本文選擇首都圖書館2018—2022年的中文圖書采購數(shù)據(jù)作為實驗基礎(chǔ)源數(shù)據(jù),探索一種新的采購模式,以信息技術(shù)為主,主觀經(jīng)驗為輔,對公共圖書館的智能化采購進行探索。
為了實現(xiàn)批量化智能操作,我們與供貨商和出版社進行了多次溝通和反復(fù)修改,最終確定了書目數(shù)據(jù)提供的格式規(guī)范和著錄內(nèi)容的標準化。我們統(tǒng)一了書目模板,其中包括ISBN、題名、副題名、分卷號、分卷名、叢編項、頁數(shù)、尺寸、分類號、讀者對象和圖書簡介?;诖?,我們結(jié)合本館的館藏資源建設(shè)方針,對供貨商提供的原始書目數(shù)據(jù)進行初步分類智能篩選。我們制定了流程圖(見圖1),以便更好地比對和分析數(shù)據(jù)信息。
圖1 圖書采購流程圖(前期部分)
經(jīng)過對數(shù)據(jù)的分類篩選,可將館配商所提供的原始書目劃分成5 個新書目表。將新書目表1導(dǎo)出,以便日后定期對高碼洋圖書采購進行有針對性的采訪小組內(nèi)部討論。對新書目表2則按照館藏政策進行預(yù)訂購,導(dǎo)出預(yù)訂購數(shù)據(jù)表,采購人員確認后下訂。對新書目表3中的圖書按每種1冊預(yù)訂購,導(dǎo)出數(shù)據(jù)表格由采購人員確認后下訂。新書目表4 作為連續(xù)出版物書目,其情況相對復(fù)雜,可分為兩種情況進行處理(見圖2)。最后,將新書目4處理形成的新書目表6與新書目表5進行匯總,形成一份書目信息表格,以便進行下一步只能采購演算。
表1 程序?qū)С龅?00本推薦分數(shù)最高的圖書
圖2 新書目表4的處理流程圖
圖書采購?fù)扑]算法是公共圖書館中的一個重要算法。由于缺乏用戶行為數(shù)據(jù),傳統(tǒng)的協(xié)同過濾推薦算法無法直接應(yīng)用于圖書館的新書采購。因此,基于內(nèi)容的推薦算法和基于知識圖譜的推薦算法成為圖書館推薦系統(tǒng)中常用的兩種算法?;趦?nèi)容的推薦算法可以根據(jù)圖書的屬性(如書名、作者、出版社、分類等)來計算它們之間的相似性,然后推薦與歷史購買的圖書相似的新圖書?;谥R圖譜推薦算法則通過建立圖書之間的關(guān)系來推薦相應(yīng)的圖書。例如,如果歷史購買中有很多計算機科學(xué)類的圖書,那么可以推薦其他與計算機科學(xué)相關(guān)的圖書。
本文將基于內(nèi)容的推薦算法和基于知識圖譜的推薦算法相結(jié)合(見式(1)),可以進一步提高推薦的準確性和個性化程度。在綜合推薦分數(shù)的計算中,可以通過調(diào)整權(quán)重因子來平衡兩種算法的影響力。例如,當(dāng)需要強調(diào)基于內(nèi)容的推薦算法時,可以將權(quán)重因子α設(shè)定為較大的值;反之,當(dāng)需要強調(diào)基于知識圖譜的推薦算法時,可以將權(quán)重因子α設(shè)定為較小的值。式中,表示第本新圖書的推薦分數(shù);表示第 個新圖書與歷史采購書目中的圖書的相似度;表示第個新圖書與歷史采購書目中的圖書的關(guān)聯(lián)度;為調(diào)節(jié)參數(shù),用于平衡兩種算法的推薦分數(shù)。
為了使用基于內(nèi)容的推薦算法推薦新的圖書列表,可以使用TF-IDF算法來提取每本圖書的特征向量。首先,將歷史MARC數(shù)據(jù)中的330字段和新書目中的圖書介紹內(nèi)容作為文本數(shù)據(jù),使用TF-IDF算法計算每個關(guān)鍵詞在文檔中的重要性,方法是將關(guān)鍵詞在文檔中的詞頻和逆文檔頻率相乘。然后,選取N個關(guān)鍵詞作為每本圖書的特征向量。最后,使用余弦相似度來計算每本圖書之間的相似度,余弦相似度值越大,表示兩本圖書越相似。因此,通過基于歷史書目的屬性和特征,可以從新書目中挑選出具有類似屬性和特征的圖書。
vectorizer = TfidfVectorizer(max_features=5000)
book_descriptions = history_data['book_description'].fillna('')
book_names = history_data['book_name']
book_name_and_descriptions = book_names+ ' ' + book_descriptions
book_features = vectorizer.fit_transform(book_
name_and_descriptions)
new_book_names = new_data['book_name']
new_book_descriptions = new_data['book_description'].fillna('')
new_book_name_and_descriptions = new_book_names + ' ' + new_book_descriptions
new_book_features = vectorizer.transform(new_book_name_and_descriptions)
similarity_matrix = cosine_similarity(new_book_features, book_features)
recommendations = {}
for i, new_book in enumerate(new_book_names):
similarity_scores = similarity_matrix[i]
recommendation_score = sum(similarity_scores) / len(similarity_scores)
recommendations[new_book] = recommendation_score
sorted_recommendations = sorted(recommendations.items(), key=lambda x: x[1], reverse=True)
基于知識圖譜的推薦算法通過構(gòu)建一個包含每本書、其作者和出版商的圖形結(jié)構(gòu)來遴選采購新書。與傳統(tǒng)的推薦算法不同,該算法不需要對用戶行為進行跟蹤或收集,而是利用圖書的元數(shù)據(jù)構(gòu)建一個整體的知識圖譜。具體而言,每本圖書作為一個節(jié)點,使用圖書的元數(shù)據(jù)作為節(jié)點的屬性,并通過圖書之間的關(guān)系(如作者、出版社、主題詞、分類號等),尤其是采用相鄰歷史書籍之間的關(guān)聯(lián)來連接節(jié)點,形成一個半結(jié)構(gòu)化的圖形數(shù)據(jù)庫。利用構(gòu)建好的知識圖譜,我們可以計算每本新書與歷史書籍之間的關(guān)聯(lián)度,從而推薦相關(guān)的圖書。例如,在推薦新書時,我們可以根據(jù)新書的作者、出版商等屬性在圖譜中找到其鄰居節(jié)點,并通過計算它們之間的邊權(quán)重來得到與新書相關(guān)的推薦書目。該算法可以幫助用戶發(fā)現(xiàn)與其喜好相關(guān)的新書,同時確保用戶的隱私不受侵犯。
graph = build_knowledge_graph(history_data)
new_books = set(new_data['book_name'])
recommendations2 = {}
for book in new_books:
if book not in graph:
continue
for neighbor in graph.neighbors(book):
if neighbor != book and neighbor not in new_books:
weight = graph[book][neighbor]['weight']
if neighbor not in recommendations2:
recommendations2[neighbor] = 0
recommendations2[neighbor] += weight
sorted_recommendations2 = sorted(recommendations2.items(), key=lambda x: x[1], reverse=True)
def build_knowledge_graph(data):
# 創(chuàng)建知識圖譜
graph = nx.Graph()
# 添加節(jié)點
for _, row in data.iterrows():
book = row['book_name']
author = row['author']
publisher = row['publisher']
graph.add_node(book, bipartite='book')
graph.add_node(author, bipartite='author')
graph.add_node(publisher, bipartite='publisher')
# 添加邊
graph.add_edge(book, author, weight=1)
graph.add_edge(book, publisher, weight=1)
return graph
綜合基于內(nèi)容的推薦算法和基于知識圖譜的推薦算法,可以為采購人員提供更全面和準確的推薦服務(wù)。為了得到綜合推薦分數(shù),我們使用加權(quán)平均法,其中權(quán)重參數(shù)α為0.8。該值是根據(jù)實驗結(jié)果得到的最優(yōu)值,但對于不同的數(shù)據(jù)集,可能需要進行調(diào)整。
首先對基于內(nèi)容的推薦算法得到的推薦結(jié)果進行加權(quán)平均,其中權(quán)重為0.8,然后對基于知識圖譜的推薦算法得到的推薦結(jié)果進行加權(quán)平均,其中權(quán)重為0.2。最終,將兩者得到的推薦分數(shù)加和,得到綜合推薦分數(shù)。
combined_recommendations = {}
for book, score in sorted_recommendations:
if book not in combined_recommendations:
combined_recommendations[book] ={'book_score': 0.8 * score}
else:
combined_recommendations[book]['book_score'] += 0.8 * score
for book, score in sorted_recommendations2:
if book in combined_recommendations:combined_recommendations[book]['graph_score'] = 0.2 * score
sorted_combined_recommendations =sor ted(combi ned_recom mend ations.items(),key=lambda x: x[1]['book_score'] + x[1].get('graph_score', 0), reverse=True)
本實驗使用了最近5年的圖書采購數(shù)據(jù),并給定了一個新的圖書列表?;诖?,我們開發(fā)了一個推薦程序,采用基于內(nèi)容和知識圖譜的推薦方法,對給定的新書列表進行推薦。具體而言,程序計算了每本書基于內(nèi)容和知識圖譜的推薦分數(shù),并采用加權(quán)α值為0.8的方法對兩種推薦分數(shù)進行綜合評分,以得到最終的推薦分數(shù)。最后,程序?qū)⑺型扑]的圖書按照推薦分數(shù)進行排序,輸出前100本推薦分數(shù)最高的圖書(見表格1)。
通過本實驗的結(jié)果可以發(fā)現(xiàn),該推薦程序能夠找到那些與給定書籍具有相似主題和內(nèi)容的書籍,同時還能考慮到知識圖譜中的關(guān)聯(lián)性。這表明,當(dāng)推薦系統(tǒng)利用基于內(nèi)容和知識圖譜的推薦方法進行綜合評估時,能夠為讀者提供更加個性化和精準的推薦服務(wù)。值得一提的是,該推薦系統(tǒng)還具有一定的健壯性(Robustness),能夠在不同的α值下表現(xiàn)出不錯的推薦效果。為了驗證推薦系統(tǒng)的性能,我們還進行了一些額外的實驗。具體來說,我們分別在不同的α值下進行實驗,發(fā)現(xiàn)在α值為0.8時,推薦系統(tǒng)的性能最佳。這進一步證實了該程序的有效性和實用性。
隨著人工智能技術(shù)的不斷發(fā)展,它為圖書館各項業(yè)務(wù)的創(chuàng)新升級提供了新的思路與方式。作為一名新時代的圖書館采購人員,我們需要緊跟時代的發(fā)展,不斷加深對人工智能的學(xué)習(xí)與研究,并結(jié)合圖書館的圖書采購流程,探索其應(yīng)用的結(jié)合點和突破點,助力傳統(tǒng)圖書采購工作的轉(zhuǎn)型。同時,隨著用戶行為數(shù)據(jù)的引入,我們可以應(yīng)用更多的智能算法,如協(xié)同過濾、深度學(xué)習(xí)等,從而進一步提高推薦算法的準確性和可靠性。在未來,我們可以逐步引入各大權(quán)威圖書榜單的實時數(shù)據(jù)等內(nèi)容,使圖書采購更具綜合性與時效性,推動智能圖書館的不斷發(fā)展。通過人工智能技術(shù)與圖書館采購流程的結(jié)合,我們可以更好地滿足讀者需求,提高圖書的利用率和借閱量,從而為圖書館的可持續(xù)發(fā)展做出貢獻?!?/p>