姜 楠,趙 杏,狄查美玲,張富彬
(大連民族大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,遼寧 大連 116605)
?
移動(dòng)農(nóng)業(yè)信息推薦系統(tǒng)設(shè)計(jì)
姜楠,趙杏,狄查美玲,張富彬
(大連民族大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,遼寧 大連 116605)
設(shè)計(jì)了一個(gè)農(nóng)業(yè)信息移動(dòng)服務(wù)系統(tǒng),該系統(tǒng)包括三個(gè)模塊:農(nóng)業(yè)信息展示模塊、推薦系統(tǒng)模塊和后臺(tái)管理端模塊,分別能夠?qū)崿F(xiàn)對(duì)農(nóng)業(yè)信息的展示,農(nóng)作物種子信息的推薦以及對(duì)整個(gè)系統(tǒng)信息的管理與維護(hù)。系統(tǒng)的移動(dòng)端基于iOS系統(tǒng)采用Object-C語(yǔ)言進(jìn)行開(kāi)發(fā);后臺(tái)接口采用MVC架構(gòu)模式,通過(guò)Java語(yǔ)言結(jié)合SpringMVC、Mybatis架構(gòu)封裝;推薦系統(tǒng)采用較前沿的協(xié)同過(guò)濾和Spark MLlib推薦系統(tǒng)技術(shù),并且實(shí)現(xiàn)了推薦算法的參數(shù)調(diào)優(yōu)。
農(nóng)業(yè)信息系統(tǒng);協(xié)同過(guò)濾;Spark推薦系統(tǒng);移動(dòng)技術(shù)
“互聯(lián)網(wǎng)+”為許多傳統(tǒng)行業(yè)的升級(jí)提供了良好的契機(jī)和條件,“互聯(lián)網(wǎng)+現(xiàn)代農(nóng)業(yè)”正是這一新趨勢(shì)的產(chǎn)物[1]。當(dāng)今互聯(lián)網(wǎng)技術(shù)迅猛發(fā)展,網(wǎng)上擁有海量信息資源,而農(nóng)民接收這些信息則存在“延遲”的問(wèn)題。隨著推薦系統(tǒng)在實(shí)際應(yīng)用中受到了廣泛關(guān)注和迅速發(fā)展,改變了以往信息推送的方式,且能夠?qū)崿F(xiàn)個(gè)性化推薦。通過(guò)移動(dòng)互聯(lián)網(wǎng)和智能推薦技術(shù)相結(jié)合,可以為農(nóng)民進(jìn)行農(nóng)業(yè)相關(guān)資訊和信息的推薦。
本文設(shè)計(jì)了一個(gè)基于iOS的移動(dòng)農(nóng)業(yè)信息服務(wù)系統(tǒng),通過(guò)該系統(tǒng)可以方便農(nóng)民用戶及時(shí)了解農(nóng)業(yè)資訊、最新農(nóng)業(yè)品種以及市場(chǎng)需求和天氣狀況等信息,提高農(nóng)民接受信息的效率,進(jìn)而促進(jìn)農(nóng)業(yè)生產(chǎn)的發(fā)展。
根據(jù)當(dāng)前農(nóng)民獲取農(nóng)業(yè)相關(guān)信息的現(xiàn)狀,為了改變其中的不足,給農(nóng)民帶來(lái)更多便利,本研究針對(duì)這一問(wèn)題進(jìn)行了系統(tǒng)需求分析。具體設(shè)置為:系統(tǒng)后臺(tái)管理端由系統(tǒng)管理員登錄,負(fù)責(zé)對(duì)用戶信息的管理、農(nóng)業(yè)資訊的管理、種子信息的管理、市場(chǎng)需求信息的管理,同時(shí)還能夠?qū)μ囟óa(chǎn)品加入對(duì)應(yīng)農(nóng)民用戶的評(píng)分,以此來(lái)提供推薦系統(tǒng)的數(shù)據(jù)集。后臺(tái)管理端能夠通過(guò)管理員的操作來(lái)維護(hù)手機(jī)客戶端的信息展示和正確運(yùn)行。移動(dòng)端能夠?qū)⑥r(nóng)業(yè)資訊信息、種子信息、由推薦系統(tǒng)推薦的種子信息、市場(chǎng)需求信息等展示給用戶,農(nóng)戶可以就相關(guān)技術(shù)問(wèn)題或者農(nóng)業(yè)生產(chǎn)過(guò)程中遇到的問(wèn)題進(jìn)行網(wǎng)上咨詢(xún)。能夠方便農(nóng)民用戶關(guān)注農(nóng)業(yè)新聞,查看農(nóng)業(yè)新品種的種子信息,并且系統(tǒng)還會(huì)對(duì)農(nóng)民用戶可能感興趣的種子產(chǎn)品做出推薦。市場(chǎng)需求模塊可方便農(nóng)民用戶及時(shí)了解市場(chǎng)動(dòng)態(tài),把握農(nóng)業(yè)經(jīng)營(yíng)方向,在農(nóng)業(yè)生產(chǎn)中遇到的問(wèn)題及時(shí)獲得解決,同時(shí)加入天氣預(yù)報(bào)功能,使農(nóng)民能夠?qū)崟r(shí)了解天氣情況,更好地管理農(nóng)作物。
3.1總體架構(gòu)
農(nóng)業(yè)信息服務(wù)系統(tǒng)的系統(tǒng)架構(gòu)圖如圖1。客戶端通過(guò)基于iOS平臺(tái)的Object-C語(yǔ)言設(shè)計(jì),服務(wù)器采用MVC三層結(jié)構(gòu),分別為表示層(View)、業(yè)務(wù)邏輯層(Controller)和模型層(Model)。Web端通過(guò)jsp技術(shù)實(shí)現(xiàn),以Json和Model的形式與后臺(tái)進(jìn)行交互,通過(guò)SpringMVC進(jìn)行參數(shù)解析和視圖解析,然后調(diào)用Service層的業(yè)務(wù)邏輯處理,最后通過(guò)Dao層訪問(wèn)數(shù)據(jù)庫(kù)完成數(shù)據(jù)操作[2]。iOS客戶端通過(guò)請(qǐng)求服務(wù)器間接與數(shù)據(jù)庫(kù)交互,從服務(wù)器通過(guò)參數(shù)解析、數(shù)據(jù)處理最終以Json的形式向客戶端返回?cái)?shù)據(jù),其后臺(tái)的調(diào)用過(guò)程與Web后臺(tái)數(shù)據(jù)處理相同。天氣預(yù)報(bào)的數(shù)據(jù)通過(guò)調(diào)用第三方API接口將數(shù)據(jù)進(jìn)行返回,通過(guò)客戶端進(jìn)行展示。
圖1 系統(tǒng)架構(gòu)圖
3.2數(shù)據(jù)庫(kù)設(shè)計(jì)
針對(duì)于各個(gè)模塊的需求,為提供系統(tǒng)數(shù)據(jù)存儲(chǔ)的支撐,農(nóng)業(yè)信息服務(wù)系統(tǒng)的應(yīng)用需求抽象為信息世界的結(jié)構(gòu),從而能夠準(zhǔn)確的用數(shù)據(jù)庫(kù)管理系統(tǒng)實(shí)現(xiàn)這些需求。表示概念模型的方式有很多,通常采用實(shí)體-聯(lián)系方法(Entity-Relationship Approach),本系統(tǒng)的E-R圖(E-R Diagram)如圖2。
圖2 E-R圖
3.3推薦系統(tǒng)設(shè)計(jì)
本系統(tǒng)數(shù)據(jù)集通過(guò)實(shí)際調(diào)查、回訪獲取數(shù)據(jù),然后由管理員從后臺(tái)錄入系統(tǒng)數(shù)據(jù)庫(kù),生成用戶偏好數(shù)據(jù),供推薦系統(tǒng)分析、計(jì)算。目標(biāo)用戶登錄手機(jī)客戶端,系統(tǒng)會(huì)獲取用戶登錄id編號(hào),當(dāng)用戶點(diǎn)擊種子推薦頁(yè)面時(shí),系統(tǒng)會(huì)根據(jù)用戶行為判斷,如果用戶沒(méi)有通過(guò)按鈕點(diǎn)擊種子詳細(xì)信息,則通過(guò)基于用戶的推薦算法推薦,此時(shí),通過(guò)分析不同用戶可能具有相同的興趣愛(ài)好而向用戶推薦其他具有相同興趣的用戶也感興趣的物品;如果用戶發(fā)生了點(diǎn)擊種子詳細(xì)信息的動(dòng)作,則通過(guò)基于物品的推薦算法為用戶提供推薦[3]。如果用戶點(diǎn)擊了某個(gè)種子信息,則表明用戶對(duì)這個(gè)種子感興趣,因此通過(guò)分析與此種子相似度較高的種子信息為用戶推薦,最后生成推薦列表顯示在手機(jī)客戶端。
根據(jù)移動(dòng)開(kāi)發(fā)設(shè)計(jì)準(zhǔn)則,本系統(tǒng)采用了簡(jiǎn)潔易操作的設(shè)計(jì)風(fēng)格,其布局和頁(yè)面清晰明了,擁有較好的用戶體驗(yàn)。
4.1移動(dòng)客戶端實(shí)現(xiàn)
以農(nóng)業(yè)資訊頁(yè)面為例,通過(guò)從服務(wù)器獲取農(nóng)業(yè)資訊相關(guān)數(shù)據(jù),用列表的形式進(jìn)行展現(xiàn),包括新聞圖片、新聞標(biāo)題、新聞?lì)A(yù)覽等內(nèi)容,點(diǎn)擊每一條新聞進(jìn)入詳情頁(yè)面,顯示新聞標(biāo)題、發(fā)布時(shí)間、新聞圖片以及新聞?wù)摹?/p>
此模塊涉及NewsViewController類(lèi)、NewsDetailViewController類(lèi)以及NewsTableViewCell類(lèi)。其中,前兩個(gè)類(lèi)分別負(fù)責(zé)展示農(nóng)業(yè)資訊列表和資訊詳情, NewsTableViewCell類(lèi)負(fù)責(zé)顯示資訊列表中每條資訊的UI。NewsTableViewCell類(lèi)同時(shí)創(chuàng)建了同名的xib文件,通過(guò)xib的方式創(chuàng)建相應(yīng)的控件,根據(jù)設(shè)計(jì)圖分別拖選UIImageView、UILabel等控件,對(duì)于不同機(jī)型的適配,采用添加約束的方式,通過(guò)把cell加載到NewsViewController類(lèi)中的UITableView上來(lái)實(shí)現(xiàn)列表的展示。為防止出現(xiàn)手機(jī)因加載圖片過(guò)多、內(nèi)存飆升而導(dǎo)致crash的情況,UITableView的cell利用了復(fù)用機(jī)制。
進(jìn)入該模塊或下拉列表時(shí),調(diào)用getNewsArray方法利用ServerCommunicator類(lèi)從服務(wù)器請(qǐng)求農(nóng)業(yè)資訊的最新json信息,數(shù)據(jù)獲取成功或失敗會(huì)通過(guò)代理的方式回調(diào)到NewsViewController,在成功的回調(diào)方法handleRequestCompletion中,通過(guò)NSJSONSerialization類(lèi)對(duì)json數(shù)據(jù)進(jìn)行解析來(lái)獲得標(biāo)題、內(nèi)容等信息,顯示到對(duì)應(yīng)的label上;對(duì)于新聞圖片,服務(wù)器返回圖片的地址,利用SDWebImage第三方庫(kù)將圖片從網(wǎng)絡(luò)異步下載之后,加載到頁(yè)面上,圖片緩存到本地,下次進(jìn)入模塊或下拉刷新時(shí),相同圖片不必再次請(qǐng)求網(wǎng)絡(luò)。
點(diǎn)擊每一個(gè)新聞,在UITableViewCell的代理方法didSelectRowAtIndexPath中init一個(gè)NewsDetailViewControllew類(lèi)的對(duì)象來(lái)顯示新聞詳情頁(yè)面,該頁(yè)面所需控件為UILabel、UIImage以及UITextView,通過(guò)請(qǐng)求服務(wù)器獲取詳情的json信息,解析之后把結(jié)果存儲(chǔ)到NewsInfo實(shí)體類(lèi)中,再把數(shù)據(jù)顯示到對(duì)應(yīng)的控件上,該模塊采用mvc的設(shè)計(jì)模式。
4.2后臺(tái)管理系統(tǒng)實(shí)現(xiàn)
本系統(tǒng)后臺(tái)管理端模塊實(shí)現(xiàn)的功能包括所有功能模塊信息的錄入以及信息的維護(hù),主要包括農(nóng)業(yè)資訊信息、種子產(chǎn)品信息、市場(chǎng)需求信息的管理、農(nóng)業(yè)咨詢(xún)留言的管理以及對(duì)用戶信息的維護(hù)。
后臺(tái)管理端采用瀏覽器/服務(wù)器(B/S)架構(gòu),開(kāi)發(fā)工具使用intelliJ IDEA,服務(wù)器采用jetty服務(wù)器,通過(guò)maven代碼管理工具構(gòu)建項(xiàng)目,技術(shù)上采用主流的三層架構(gòu),分別為表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)持久層。表示層采用Html、Css、JavaScript和bootstrap等技術(shù)設(shè)計(jì)網(wǎng)頁(yè),通過(guò)SpringMVC解析前臺(tái)傳過(guò)來(lái)的參數(shù),通過(guò)Controller對(duì)應(yīng)前端頁(yè)面;業(yè)務(wù)邏輯層通過(guò)Service作出相應(yīng)的處理,供Controller調(diào)用,從而實(shí)現(xiàn)代碼的通用性,有效避免代碼復(fù)用,使程序邏輯更加清新;數(shù)據(jù)持久層采用Mybatis進(jìn)行對(duì)數(shù)據(jù)庫(kù)的添加、修改、查詢(xún)和刪除等操作。后臺(tái)服務(wù)端管理界面如圖3。
圖3 后臺(tái)管理系統(tǒng)界面
服務(wù)器與客戶端之間的數(shù)據(jù)交互主要通過(guò)JSON獲取對(duì)象的形式,然后采用Ajax以GET或者POST方式發(fā)出請(qǐng)求,并且以JSON的形式將所請(qǐng)求的數(shù)據(jù)返回。前臺(tái)通過(guò)EL表達(dá)式和jstl標(biāo)簽將數(shù)據(jù)或者通過(guò)jQuery動(dòng)態(tài)加載在頁(yè)面上。因?yàn)橄到y(tǒng)采用Spring框架,所以controller文件需要@Controller注解,Service文件需要@Service注解,系統(tǒng)在啟動(dòng)時(shí),會(huì)通過(guò)注解加載這些文件。
以農(nóng)業(yè)資訊為例,農(nóng)業(yè)資訊列表頁(yè)通過(guò)訪問(wèn)路徑Http://localhost:8080/rest/web/news/list,根據(jù)配置找到controller文件@RequestMapping注解,找到指定的方法,controller方法依次調(diào)用Service,再通過(guò)Service調(diào)用Dao,返回農(nóng)業(yè)資訊String類(lèi)型頁(yè)面文件名,并將獲取的News類(lèi)型的List存入Model中,然后在頁(yè)面通過(guò)EL表達(dá)式的方式顯示。如果修改農(nóng)業(yè)資訊,首先需要頁(yè)面發(fā)起請(qǐng)求,通過(guò)Ajax訪問(wèn)路徑Http://localhost:8080/rest/web/news/update?id=1,根據(jù)@RequestMapping注解找到對(duì)應(yīng)的方法,調(diào)用Service和Dao返回需要修改的記錄,以JSON的形式返回,然后通過(guò)jQuery動(dòng)態(tài)填入修改信息的表單中用以顯示,修改需要改動(dòng)的數(shù)據(jù)后提交表單,訪問(wèn)Controller中updateDo方法將數(shù)據(jù)封裝成對(duì)象傳入Service和Dao進(jìn)行修改,并返回“操作成功”提示。
4.3推薦系統(tǒng)的實(shí)現(xiàn)
由于Spark提供了豐富的接口,包括Java、Python、Scala語(yǔ)言的API和內(nèi)建的程序庫(kù)。Spark可以與其他大數(shù)據(jù)工具配合使用,運(yùn)行在Hadoop集群上[4]。由于本系統(tǒng)后臺(tái)開(kāi)發(fā)語(yǔ)言采用的是Java語(yǔ)言,所以首先需要在程序中引入Java的Spark相關(guān)jar包,基于Spark MLlib協(xié)同過(guò)濾推薦系統(tǒng)的數(shù)據(jù)集要以用戶信息、農(nóng)作物種子產(chǎn)品信息和用戶-產(chǎn)品評(píng)分為依托,創(chuàng)建一個(gè)JavaSparkContext(Spark容器),然后將用戶評(píng)分表中的數(shù)據(jù)轉(zhuǎn)化為一個(gè)String類(lèi)型的JavaRDD,通過(guò)對(duì)JavaRDD進(jìn)行轉(zhuǎn)化操作用Rating的格式包裝,此時(shí)JavaRDD變成Rating類(lèi)型,調(diào)用ALS(最小交替二乘)的訓(xùn)練函數(shù)。ALS的訓(xùn)練函數(shù)train包含rdd,rank,iterations,lambda四個(gè)參數(shù):(1)rdd為數(shù)據(jù)集。(2)rank表示ALS模型中因子個(gè)數(shù),也就是將稀疏矩陣轉(zhuǎn)變?yōu)閮蓚€(gè)低階矩陣隱含特征個(gè)數(shù)。因子個(gè)數(shù)影響訓(xùn)練效果和系統(tǒng)開(kāi)銷(xiāo),二者為反比,合理取值為10~200,需要在實(shí)踐中調(diào)節(jié)參數(shù),選擇合理的一個(gè)。(3)iterations表示運(yùn)行時(shí)迭代次數(shù),ALS每次迭代降低評(píng)級(jí)矩陣的重建誤差,一般少數(shù)次迭代就可以收斂為一個(gè)合理的模型。(4)Lambda用于控制模型的正則化過(guò)程,從而控制過(guò)擬合情況,該參數(shù)要根據(jù)實(shí)際數(shù)據(jù)的特征、大小和稀疏程度來(lái)確定。在本項(xiàng)目中我們將rank、iterations、lambda參數(shù)的值依次確定為100,15,0.01。通過(guò)訓(xùn)練模型得到一個(gè)MatrixFactoriaztionModel(用戶對(duì)所有物品的評(píng)分)。MatrixFactoriaztionModel中有很多方法,可以預(yù)估特定用戶對(duì)特定物品的評(píng)分,也可以將用戶對(duì)物品的評(píng)分以倒序形式輸出,從而得到推薦列表。
本文采用Spark技術(shù)實(shí)現(xiàn)了農(nóng)業(yè)信息移動(dòng)服務(wù)系統(tǒng)的推薦子系統(tǒng),可以有效提高系統(tǒng)的計(jì)算速度,進(jìn)行物品推薦,能夠幫助農(nóng)戶在眾多可選項(xiàng)中發(fā)現(xiàn)新物品,做出更好的選擇,進(jìn)而對(duì)農(nóng)業(yè)發(fā)展起到積極的作用。
[1] 國(guó)務(wù)院.國(guó)務(wù)院關(guān)于積極推進(jìn)“互聯(lián)網(wǎng)+”行動(dòng)的指導(dǎo)意見(jiàn)[R]. 中華人民共和國(guó)國(guó)務(wù)院公報(bào), 2015(20):20-22.
[2] 徐雯,高建華.基于Spring MVC及MyBatis的Web應(yīng)用框架研究[J]. 微型電腦應(yīng)用, 2012, 28(7):1-4.
[3] 楊志偉. 基于Spark平臺(tái)推薦系統(tǒng)研究[D]. 北京:中國(guó)科學(xué)技術(shù)大學(xué),2015.
[4] 黃潔,夏俊鸞,劉旭暉,等.Spark大數(shù)據(jù)處理技術(shù)[M].北京:電子工業(yè)出版社,2015.
(責(zé)任編輯鄒永紅)
The Design of Mobile Agricultural Information Recommendation System
JIANG Nan, ZHAO Xing, DI Cha-meiling, ZHANG Fu-bin
(College of Computer Science and Engineering,Dalian Nationalities University,Dalian Liaoning 116605,China)
Design a agricultural information mobile service system, consists of three modules of the system, including agricultural information display module, recommend system module and background management module, respectively to achieve the display of agricultural information, the recommendation of crop seeds and the management and maintenance of system information. Front-end of the system using Object-C language development; backend interface using MVC architecture pattern, through the Java language combined with SpringMVC and Mybatis to develop; recommendation system using collaborative filtering and spark MLlib Advance technology, and realize the recommendation algorithm parameter tuning.
Agricultural information system; collaborative filtering; Spark recommendation system; mobile technology
2096-1383(2016)05-0505-04
2016-07-01;最后
2016-08-15
全國(guó)工程專(zhuān)業(yè)學(xué)位研究生教育自選課題(2014-JY-106 );國(guó)家民委科研項(xiàng)目(14DLZ012)。
姜楠(1964-),女,山東龍口人,教授,主要從事信息安全研究。
TP39
A