项目简介

OSSRec

11879?1461414358
发帖时间:08/09/2016 21:03
更新时间:08/11/2016 09:57

1.主要方法

   将用户所有相关的tag组合成一个query,用户对某个tag的关心程度通过设定字段的boost来体现;Github的所有项目看做多个document,分成title和description两个域,基于Lucene实现用户和项目的匹配算法,取出Top n的项目为用户推荐。


2.实验结果

    例如:为stackoverflow用户ID=20089推荐项目,实验中取了排名前50个匹配项目,项目Id及匹配分数                     如下图所示


           image

      

             根据匹配分数拿到github项目具体信息:

            image

 

       stackoverflow的用户信息(可参考stackoverflow的top tags,反映了用户的关心领域)

    image



     结论:从上图可以看出,推荐的项目与用户的关心领域是密切相关的,top tags上是与前端相关的标签js,jquery等,匹配的项目也是与前端相关。由此可以认为该算法可以为用户从海量项目中筛选出用户所关心的项目

     优化:用户的关心领域的考量可以加入时间因子,某个帖子的发布时间越近,与帖子相关的tag应该获取更高的权重,存储tag的最近更新时间,取其与第一个stackoverflow帖子的时间差的函数值作为参考。


3.下一步工作

   上述工作得到了用户的所关心的领域的匹配项目,需要进一步筛选,项目本身有优劣之分,用户也有技术能力高低,如何确定该项目是否值得向某用户推荐,需要用户项目两个方面来分析。 首先,还是从项目出发,普遍认为流行的项目会更吸引用户关注,通过github项目属性,比如watch,fork,contributor,pull request等,皆能体现用户参与度。分析项目属性,对项目进行评价,记你一步筛选出比较流行的、优秀的项目推荐给用户。

            

回复 ︿ (2)
  • 用户头像
    曾雅蓉 3年前
    5?1460204756
    尹刚 3年前
    很好!请同步考虑,如何验证你的结果是好的?

    可以通过邮件地址将两个平台的用户关联起来,看一段时间后该用户是否有涉猎我们推荐的项目。或者直接向stackoverflow有留邮件地址的用户,发邮件确认。

0?1470885445
登录后可添加回复
11879?1461414358
发帖时间:08/01/2016 10:20
更新时间:08/09/2016 19:10

推荐算法的具体实现:

1.用户相关tag在所有用户参与帖子中出现次数的统计(正相关)

tf(tag in post) = 某个tag累积出现次数 / 用户帖子总数;

 

2.用户相关tag在所有帖子中出现次数(负相关:出现次数越少说明越是针对当前用户):

idf(tag) = log(总帖子数/包含Tag的帖子数)

 

3.搜索到的项目可能包含多个用户相关的tag,一个项目中的包含的tag数越多,越重要(正相关)

coord(all tags,d)

 

4.stackoverflow用户和Github项目的匹配相关性计算:

引用Lucene打分机制,对查询tagq)和github项目(d)计算相关性(按照单个tag查询),得到匹配分数。

term------->tag

document---------->github项目

field-------->title/description

image


最终可以得到一个计量分值S

S = tf * idf * coord * score 

按照此分值对相关项目排序,完成个性化推荐。

回复 ︿ (1)
  • 用户头像
    湛云 3年前

    第3步中的coord是直接取项目包含的tag数量吗? 这个coord是不是和Lucene打分公式中的coord重复了?

    单个tag和项目的相关性计算是不是不如直接用用户所有的tag构成查询去计算相关性更好? 因为Lucene采用空间向量模型计算score,用多个tag构成的查询向量去和项目文本计算语义相关性是不是更合适一些?

0?1470885445
登录后可添加回复
3675?1464853545
发帖时间:07/19/2016 17:30
更新时间:07/23/2016 12:47

一、背景:

Stackoverflow社区是规模庞大的Q&A社区,Github也是代码托管和项目开发领域规模庞大的社区。虽然两者在计算机软件开发领域都有非常大的影响力,但两者目前为止还是相对比较独立的。

二、问题/意义:

我们知道,Stackoverflow社区中回答问题的用户很多都是有丰富项目经验的,如果可以为这些用户快速提供一些他们关心领域的项目,对这些人来说,让自己在这一领域有更深造诣和大显身手的机会;对于项目而言,也会因为有这些人的参加而更好地发展。

将两个社区联系起来,为Stackoverflow中的用户提供一些Github开源项目,简化用户搜索查找的操作成为了很有意义的一件事情。

三、具体方法:

a) 找到用户关心领域

                 i. 统计某段时间用户回答的帖子

                ii. 统计帖子的tag信息,筛选出用户参与做多的tag作为其关心领域

b) 根据每个tag信息在Github中搜索关联repositorytag在整个数据集中出现频率越低越focus

c) 设计推荐算法给出最终排序结果

                 i. 每个搜索到的帖子中和用户相关的tag种类数目(正相关)

                ii. 每种用户相关tag在用户参与帖子中出现次数的统计(正相关)

               iii. 每种用户相关tag在所有帖子中出现次数(负相关:出现次数越少说明越是针对当前用户)

               ⅳ. Github项目匹配的相关性(正相关)

四、验证:

Github用户和Stackoverflow用户关联起来,例如:Email/Website(向王涛师兄请教这方面你的问题)

a) 这些用户在我们推荐算法考虑的时间段后,我们推荐的项目和实际参与的Github项目的交集(x

b) 我们的推荐算法对这些用户推荐的项目数(y

c) 推荐算法考虑到的时间段后这些用户实际参与的Github项目数(z

precisionx/y

recall: x/z

回复 ︿ (2)
  • 用户头像
    16FanQ 3年前
    很好

  • 用户头像
    尹刚 3年前
    很好,写的非常清楚!有两点说明:
    1 要强调个性化推荐,不是普通推荐或排序。是要给具体的某一个人推荐他可能感兴趣的repo
    2 在背景上,我们不是做两个社区的关联,我们是要做软件领域的个性化推荐。关联只是我们的技术思路

    具体你是不是为一类人推荐?

0?1470885445
登录后可添加回复
3675?1464853545
发帖时间:07/18/2016 12:47
更新时间:07/18/2016 12:47

目前考虑还存在以下问题:

1. 如何提取问题翻译后的关键词

2. stackoverflow中存在大量对错误代码的提问,回答中只修改了错误的代码片段

image

3. 需要对trustie中类似ACM编程问题进行转化,提取出具体解决问题的方法

image

回复 ︿
0?1470885445
登录后可添加回复
3675?1464853545
【周报】 Week Report 2 正常
指派给   张迅晖
发布时间: 07/17/2016 11:25
更新时间:07/17/2016 11:25

This week, our team held a conference, and we changed our orientation a little bit.

In the first week, our goal was to give a software recommendation of github open source software to students who join classes in Trustie. But soon we found that the requirement is not urgent. Firstly, the homework set in classes are always small projects or code segments, which don’t need a large open source software for support. Secondly, most times the students need code of low-level rather than API of high-level abstraction.

But for repositories in github, we found that there are some small projects related to the homework students do everyday. However, the star number and branch number are all very small, which is hard for us to judge which is better. So what we want to do is recommending codes to students in Trustie referring to stackoverflow and github.

This week, the work finished is listed as follows:

1.         Got related data from trustie database

2.         Downloaded data of stackoverflow

3.         Confirmed the goal and division of work

Plan for the next week:

1.         Finish the API of querying code from stackoverflow database using key words

2.         Give a ranking of the query result using a simple algorithm

回复 ︿ (1)
  • 用户头像
    张迅晖 3年前

    Subject changed from 【周报】Week Report 2 to Week Report 2

0?1470885445
登录后可添加回复
3675?1464853545
发帖时间:07/14/2016 21:30
更新时间:07/17/2016 15:54

trustie中有用户参与的课程,没门课程有相应的作业。我们可以把相关stackoverflow中帖子里面的代码匹配上相应的作业,即将代码片段推荐给用户。
例如:有一门计算机程序设计课程java布置了一个作业——使用java语言将字符串反序。
通过在stackoverflow中查找相应的帖子,我们发现有很多带有java reverse string的帖子,帖子中的代码片段可以直接拿来使用。(见截图)imageimage

回复 ︿ (5)
  • 用户头像
    尹刚 3年前
    5?1460204756
    尹刚 3年前
    很好的思考!请给出要解决的关键技术问题、关键技术思路。

    3675?1464853545
    张迅晖 3年前

    现在的问题是:trustie中作业的描述信息是中文,如果直接用翻译API是不是会有好效果;作业信息中关键词的提取;由于sof上的数据我还没有下载好,代码那边的提取是不是有难点我现在还不好确定。
    另外一个问题是:我们ow2的题目叫“Open Source Software Recommendation by Mining Online Community Documents” 如果只是推荐sof上的代码是不是跑题了?

    5?1460204756
    尹刚 3年前

    对于Trustie的编程作业,我觉得最值得做的是对学生代码的分析和评价。

    如果我们对学生编程作业的活动,进行代码推荐,我还没有找到很恰当的切入点。你们可以再想想。


    如果考虑GitHub和SOF的结合,我认为可以做一个和范强目前正在做的类似的工作:

    1、获取用户在SOF上的问答信息提取,用户兴趣特征

    2、为用户推荐GitHub上的开源软件

    3675?1464853545
    张迅晖 3年前

    Trustie的编程作业好像都是有标准代码的,如果推荐是不是直接从数据库里面把标准代码关键信息提取出来就可以了

    一般老师不会给标准代码

0?1470885445
登录后可添加回复
3675?1464853545
发帖时间:07/14/2016 16:48
更新时间:07/14/2016 16:48

trustie中用户数据:个人信息(参与的课程、项目);课程信息(作业信息);项目信息(描述信息)
github中项目数据:项目介绍(列表页面的一句话介绍);readMe文件;pull-request描述;issue描述
思路:

1. 通过trustie中每个人参加的课程中作业的信息,匹配github中的项目,提供github项目的推荐,辅助完成作业

2. 通过trustie中每个人参与的项目信息,匹配github中的项目,用github中的开源项目辅助项目开发

3. 通过trustie中每个人参与的项目信息,匹配github中的项目,让开发人员参与到大型项目的开发中
问题:
github中描述信息都是英文,而trustie中的信息都是中文
github中readMe关键信息如何提取(因为格式不同)
github中issue和pull-request关键信息如何提取

PS:明天可以拿到trustie的数据

回复 ︿
0?1470885445
登录后可添加回复
3213?1442652660
【周报】 Week Report 1 正常
指派给   LiZX
发布时间: 07/11/2016 22:42
更新时间:07/11/2016 22:42
We want to provide a service to trustie users, which helps the user get related software recommendation.
Step 1: we get the user data from trustie. With the help of our tutor. We can easily get the data source, including the classes that the user participate, the projects he/she joins, and etc.
Step 2: we will create our recommendation algorithm, and generate our service.
Step 3: test the information through experiment to see whether the service is better.
Step 4: implement the service and integrate it into ossean.
PS: the algorithm is open source. We will put the result on trustie.
回复 ︿
0?1470885445
登录后可添加回复
3213?1442652660
创建时间:07/11/2016 22:41
问题和建议
还能输入50个字符 Submit

加入QQ群

关注微信APP


×