Skip to content
This repository has been archived by the owner on Jul 22, 2024. It is now read-only.

Add similar users example #38

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 55 additions & 3 deletions notebooks/elasticsearch-spark-recommender.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -891,6 +891,21 @@
" hits = results['hits']['hits']\n",
" return src, hits[1:num+1]\n",
" \n",
"def get_similar_users(the_id, q=\"*\", num=10, index=\"demo\", dt=\"users\"):\n",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe we don't need a new method here. You can simply call get_similar(id, q, num, index, dt="users") for the same result.

" \"\"\"\n",
" Given a user id, execute the recommendation function score query to find similar users, ranked by cosine similarity\n",
" \"\"\"\n",
" response = es.get(index=index, doc_type=dt, id=the_id)\n",
" src = response['_source']\n",
" if '@model' in src and 'factor' in src['@model']:\n",
" raw_vec = src['@model']['factor']\n",
" # our script actually uses the list form for the query vector and handles conversion internally\n",
" query_vec = reverse_convert(raw_vec)\n",
" q = fn_query(query_vec, q=q, cosine=True)\n",
" results = es.search(index, dt, body=q, size=50)\n",
" hits = results['hits']['hits']\n",
" return src, hits[1:num+1]\n",
" \n",
" \n",
"def get_user_recs(the_id, q=\"*\", num=10, index=\"demo\"):\n",
" \"\"\"\n",
Expand Down Expand Up @@ -990,6 +1005,27 @@
" if i % 5 == 0:\n",
" sim_html += \"</tr><tr>\"\n",
" sim_html += \"</tr></table>\"\n",
" display(HTML(sim_html))\n",
" \n",
"def display_similar_users(the_id, q=\"*\", num=10, index=\"demo\", dt=\"users\"):\n",
" \"\"\"\n",
" Display similar users and similarity scores, in a table\n",
" \"\"\"\n",
" user, recs = get_similar_users(the_id, q, num, index, dt)\n",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hence per my comment above, this call could just be user, recs = get_similar(the_id, q, num, index, dt="users")

"\n",
" display(HTML(\"<h2>Get similar users for:</h2>\"))\n",
" display(HTML(\"<h4>%s</h4>\" % user['id']))\n",
" display(HTML(\"<br>\"))\n",
" display(HTML(\"<h2>Similar users:</h2>\"))\n",
" sim_html = \"<table border=0>\"\n",
" i = 0\n",
" for rec in recs:\n",
" r_score = rec['_score']\n",
" sim_html += \"<td><h5>%s</h5></td><td><h5>%2.3f</h5></td>\" % (rec['_id'], r_score)\n",
" i += 1\n",
" if i % 5 == 0:\n",
" sim_html += \"</tr><tr>\"\n",
" sim_html += \"</tr></table>\"\n",
" display(HTML(sim_html))"
]
},
Expand Down Expand Up @@ -1068,9 +1104,7 @@
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"metadata": {},
"source": [
"### 5(b) Find movies to recommend to a user\n",
"\n",
Expand Down Expand Up @@ -1114,6 +1148,24 @@
"\n",
"As you did with the similar movies recommendations, feel free to play around with the various queries you could pass into the user recommendation query."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 5(c) Get users similar to another\n",
"\n",
"It is also possible to compute similar users for a given one. We have only indexed IDs for our users, but it is already functional enough."
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about something like "It is also possible to compute similar users for a given one. Note that we have only indexed IDs for our users, so the results are difficult to interpret. However, we include the computation here for completeness."

]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"display_similar_users(31)"
]
}
],
"metadata": {
Expand Down