Introduction

    Given the glut of content that populates a MindTouch instance, it becomes necessary to add in rating ("how helpful was this page?") of content to help weight the discovery process of content (search + reporting). This feature will allow users to rate pages, files, and comments with the intent of using the ratings to enhance content discovery (through search) and for editors to get reporting on weak areas of content.

    Intended Audience

    Intended for end-users for MindTouch 2010 deployments. 

    Additional information

    The two most common methods of rating content on the web are either the 5-star method, or the thumbs up/down method. Increasingly, sites are moving towards the thumbs up/down method. Sites which find success with the five-star system (Amazon and Yelp are two) always accompany ratings with high-quality opinions to back up the ratings (notable exception is Netflix). For sites that use the five-star system for fly-by ratings like YouTube see a huge skew instead of the expected normal distribution. If five-star systems are ineffective in providing granular data, then a simple thumbs up/down system will be more effective.

    Since the MindTouch content rating feature is meant to gauge the quality of the content as opposed to rating the opinion of the content (which would be beneficial in a more granular rating system), this spec assumes the usage of a thumbs up/down system.

    While the first iteration of this feature should focus on the rating of pages, the components should be reusable to eventually be applicable to files and comments.

    References

    Status

    Implemented in 10.0 as plugin "page_content_rating".

    Functional Specification

    Content rating can be quite an expansive feature, as it serves as the underlying engine for determing content quality. This spec will attempt to capture all the possible use cases of how it might be exposed, although we certainly won't be able to execute on every path forward.

    Feature goals:

    • Primary: Allow users to make fast, convenient page ratings to highlight useful content and flag poor pages for review. 
    • Secondary: Improve search results by incorporating ratings as a relevancy factor
    • Tertiary: Help users decide whether a page is worth reading.

    Use Cases

    User rates page content / provides feedback

    Here is the page rating component in the Deuce skin (click for full size):

    content-rating-sample.png

    Page rating asks "Was this content helpful?". Users answer by voting, under the following restrictions:

    • User must be logged in, with view permission on the page. Talk pages cannot be rated. Unauthorized users see a popup dialog requesting them to log in to vote.
    • Users must choose from simple up/down voting
    • Users can vote once per page
    • Voting statistics are displayed. If the user is first to rate, a general message is shown ("Was this helpful?").

    The display goal is to have a clear, non-intrusive way to make a rating and see current ratings. The "2 of 3 found this helpful" style shows information without unduly influencing users. Raw percentages, even when tempered with a vote count, are difficult to keep in the "helpful" range. While 2 of 3 looks fairly helpful, but 66% looks like a poor pass rate on a test.

    When a user rates a page poorly, an optional input field will appear, allowing users to post a public comment about what could be improved about the page's contents to offer constructive feedback on improving the page's quality:

     

    content-rating-feedback.png

     

    See visual states to see all possible UI states for the rating component.

    It's convenient to rate a page after reading -- there should be another rating component at the bottom, using the same icons as the floating rating bar.

    page-helpful-html.png

    User searches site

    When a user searches in MindTouch, the result set is automatically sorted with additional weighting given to highly rated pages. The improved search experience may choose to display rating information. The goal is to use ratings as a guide without confusing users about the ordering of search results.

    Editor can get reporting on content quality for editorial review

    Users, through curation dashboards, will be able to access a dashboard that contains a list of pages of the most lowly rated content (given in absolute terms of number of negative votes). This view will contain:

    • Computed page rating (sortable)
      • Trend information ("is this page trending up or down?")
    • Page title (page hierarchy)
    • Last edited date
    • Number of edits
    • Number of comments
    • Keywords (tags)

    It will also supply an editor the ability to "wipe" the ratings of the page to allow for the page to be reset (this needs to be stored in the page history somewhere)

    With the reporting on metrics, it will be critical for the statistics service to be able to pick these values up and display them in a historical manner.

    Future Use Cases

    Users develop a quality score rating based on contributions

    Every content rating applies a score to the previous contributors of a page to give users an aggregate score of their contributions to a site. This score would then be exposed through the user profile service, with the ability to see the top contributors of a page and throughout the site. User ratings can likewise be negatively impacted by poor ratings, which would be a way of socially engineering active cleanup of the site of bad content (especially content you have authored).

    Technical Specification

    Feature Roadmap

    1. Phase 1: Basic use cases (Olympic)
      • User rates page
      • Search weights and displays ratings
      • Content curation dashboard shows data around rated pages
    2. SUBJECT TO CHANGE! Phase 2: (Pipestone)
      • Weighting of ratings for different groups
      • User dashboard integration w/ expertise matching
      • Rating decay (over time?)
      • User dashboard integration (random "here are some low-rated pages you should review")
    3. SUBJECT TO CHANGE! Phase 3: (Quinebaug)
      • User reputation based on ratings

    UI requirements

    • Skin templates must be "pluggable" like the notification code.
      <?php if ($this->hasData('page.rating')) : ?>
         <?php $this->html('page.rating'); ?>
      <?php endif; ?>
    • There should be the following templates:
      • page.rating.header: javascript-only view which displays the floating bar for rating information. This view will be hidden by default in html-only mode.
      • page.rating: javascript & html-accessible view which displays the voting buttons
    • Must NOT be a part of the content - content area must be kept clear of any chrome instrusions
    • Must be visually connected to the title so a user can answer the fundamental questions quickly: (1) what page am I on? (2) how recent is this page's contents and (3) what do others say is the quality of this page?
    • Actions should allow for fallback states (URL endpoints with POST requests), but should be handled all asynchronously on that page.

    Visual States

    The voting buttons will be neutral by default.

    page-rating-detail.png

    Once a user votes, their choice will be highlighted in color in the views above.

    page-rating-detail-up.png

    page-rating-detail-down.png

    Non-JS scenarios

    Users without javascript will only see the core rating component at the bottom of the page. 

    Dynamically creating the js-only element will be difficult because of differences in skins. An explicit inclusion of the page.ratings.header makes it easier for skin authors to control where the item will render.

    Additional thoughts

    Some points for future consideration?

    • Are ratings ephemeral? If they are to be judging quality of content (although how ratings gets used is nearly impossible to do) and a page is once poorly rated, can the scoring be adjusted? (Does this precipitate the need for editors to be able to blow out ratings or manually set them? Initial thought: yes.)
    • What is the storage for rating look like? Do all pages start at a normalized score (100) and then move up/down based on rating? This would allow editors to set an artificial value, thus overriding the scoring from users.
    • Equal weighting for all users? Perhaps groups can get additional "boosters" for their ratings which allow them to artificially inflate page values.
    • The next evolution of this feature would be to tie it into user reputation, but how we get granular on edits to score users effectively remains to be seen (perhaps ratings are distributed unequally based on all previous editors, with the newest editors getting the biggest chunk of scoring - this would, however, lend itself to abuse of "empty" edits in order to game the system). (This would require the addition of user profiles)

    Other UX Ideas

    Several rating bar variations were tried (see file attachments for details). The final iteration is in the use case above.

    Commercial vs Core

    • Commercial only: (UI)  widgets
    • Commercial only: (UI)  for reporting
    • Commercial only: (Service) Rating reporting service
    • Core + Commercial: (API) Features for retrieving and setting rating information
    • Core + Commercial: (API) Existing response XML augmented to include rating information

    Disabling the feature

    Edit LocalSettings.php and add this line:

    $wgDisabledDekiPlugins[] = 'page_content_rating';  

    API requirements

    Rateable Content

    Only pages may be rated in the initial release. Files, comments, and user ratings may be implemented in the future.

    API Features

    • Set and modify a rating for a resource

    API feature additions and changes 

    GET: pages/{id} (modified response)

    The current computed rating for a page is returned in the verbose page XML document. If the current user has rated the page their rating is also included in the XML. This way the UI has enough information to ask the user to change their rating rather than rating it for the first time.

    The following XML block will be included in the verbose page XML if the viewing user has rated the content:

    <rating score="{float: 0..1}" count="{int}" date="{datetime}">
      <user.ratedby id="x" score="{float: 0..1}" date="{datetime}" href="users/{userid}" />
    </rating>

    A page that has not been rated has the following added XML

     

    <rating score="" count="0"/>

    POST: pages/{id}/ratings (new feature)

    Allows users to rate a page

    Query Parameters

     

    Name Type Description
    score int A "0" or "1" respectively indicating a poor or good rating
    Message Format

    Input: Empty body

    Output: 

    <rating score="{float: 0..1}" count="{int}" date="{date}>">
      <user.ratedby id="x" score="{float: 0..1}" date="{date}" href="users/{userid}" />
    </rating>
    Permissions
    • POST: pages/{id}/ratings requires READ permission. Anonymous users may not rate content. 
    Notifications
    • rating has changed
    Recent Changes

    Rating a page does not add an entry to Recent Changes

    Data Storage

    Existing database schema is modified to store rating information. The following tables are used:

    Table: Ratings

    This table stores raw rating information. If a user changes their vote, the timestamp_reset column in the row representing their current vote gets updated with the current timestamp. Resource_id and resource_type allows concepts other than pages to be rated such as files, pages, users. 

    CREATE TABLE `ratings` (
    `rating_id` int(10) unsigned NOT NULL auto_increment,
    `rating_user_id` int(10) unsigned NOT NULL,
    `rating_resource_id` int(10) unsigned NOT NULL,
    `rating_resource_type` tinyint(3) unsigned NOT NULL,
    `rating_resource_revision` int(10) unsigned default NULL,
    `rating_score` float unsigned NOT NULL,
    `rating_timestamp` timestamp NOT NULL default '0000-00-00 00:00:00',
    `rating_reset_timestamp` timestamp NULL default NULL,
    PRIMARY KEY (`rating_id`),
    KEY `resource_id_type_resetts_user` (`rating_resource_id`,`rating_resource_type`,`rating_reset_timestamp`,`rating_user_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
    Table: ComputedRatings

    This table has the current ratings already computed. A unique key constraint applies on resource_id and resource_type ensuring that only one current rating exists for a resource. Rows in this table are updated when a new rating occurs. 

    CREATE TABLE `ratingscomputed` (
    `ratingscomputed_id` int(10) unsigned NOT NULL auto_increment,
    `ratingscomputed_resource_id` int(10) unsigned NOT NULL,
    `ratingscomputed_resource_type` tinyint(3) unsigned NOT NULL,
    `ratingscomputed_score` float unsigned NOT NULL,
    `ratingscomputed_score_trend` float unsigned NOT NULL,
    `ratingscomputed_count` int(10) unsigned NOT NULL,
    `ratingscomputed_timestamp` timestamp NOT NULL default '0000-00-00 00:00:00',
    PRIMARY KEY (`ratingscomputed_id`),
    UNIQUE KEY `resource_id_type` (`ratingscomputed_resource_id`,`ratingscomputed_resource_type`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
    

     

    Future API considerations

    • All user ratings for a resource
      • GET: pages/{id}/ratings
      • returns individual user ratings
    • Summary of all rated content
      • GET: ratings
      • returns computed ratings
    • Highest rated pages
      • GET: ratings?type=page&sortby=-score
      • returns computed ratings
    • Most recently rated pages
      • GET: ratings?type=page&sortby=-date
      • returns computed ratings
    • Content a user has rated
      • GET: ratings?userid={x}
      • returns computed or individual user ratings
    Tag page

    Files 28

    FileVersionSizeModified 
    Viewing 15 of 16 comments: view all
    Thanks @carles.coll! yes, i'll love it ;)

    I think that a collaboration need to be measured, both the co-authors & the co-created contents.
    In my opinion, generated conversation (post comments) also is a contribution, because the content post gain value with it.
    About the first challenge, how to share the vote between all contributors, i'm thinking about it...

    I agree with Carles that dekiwiki can make the difference in this field :)
    Posted 02:38, 11 Mar 2010
    @royk When you say "When a user rates a page negatively, an input field will appear, allowing users to post a public note about why they rated the page negatively. This will post as a comment to the page"
    This will prevent on a corporate site that people critisism other people, don't do this, I've readed about it on some studies. The votes have to be anonymous on corporate sites, otherwise you will not take what you want to get with page votes.
    Posted 23:32, 12 Mar 2010
    Can you link to the studies? The negative ratings will be stored to users anyways, so they're not technically private (although if we choose to expose them to anybody besides the administrator will have to be determined). If the point of content rating is to improve the quality of the content, people will have to accept that there will be some criticism in the process.

    In any case, the "why did you rate this poorly?" form will be optional, so people can choose not to fill it.
    Posted 10:01, 15 Mar 2010
    @RoyK - I mean private votes (don't identify who voted, maybe we need a log to audit it but only for administrators).

    Some interesting readings:
    - A wiki as Intranet: a critical analysis using the Delone and McLean model ( Marina Trkman & Peter Trkman )
    - WikiFailure: the Limitations of Technology for Knowledge Sharing (Alexeis Garcia-Perez & Robert Ayres )
    - Where Is the Theory in Wikis? (Ann Majchrzak)

    All of them points to quality on content, and contributors reputation.
    Posted 03:50, 16 Mar 2010
    @RoyK i would like to make some aprreciations:
    - I agree you that up/down system will be more effective than 5-star system, and also easier to use :)
    - I think that there are two important indicators to consider: time & quality. then when you've proposed Content Curation Dashboard, you're measuring the quality of the contents but in what time? I think this is great but incomplete..., we need to measure the time, not only the quality distribution, the evolution too.
    - Furthermore i think that we need to measure four different variables: visits, edits, comments and ratings, then we can get differents point of views of contents: revision (visits), contribution (edits, comments) and recommendation (ratings).
    - About negative votes, i think the author of this criticism is who would consider where want deliver his/her comment: to the author only (and moderators) or to all (public).
    - The last, i think that "curation" term don't clarify this is about measuring, i prefer something like "valuation" IMHO ;)
    hugs :)
    Posted 05:29, 16 Mar 2010
    You can ignore term 'curation' as it won't appear in the product. Curation is a concept, not a feature.
    Posted 09:06, 16 Mar 2010
    Central to this feature is this question: What is the question that the content rating answers? In other words, if up/down is the answer, what is the question?
    Posted 10:02, 16 Mar 2010
    Some quick notes: A reexamination of the percentage as the primary end-user will need to be reconsidered, as it may not align with the actual weighting utilized.
    Posted 16:01, 25 Mar 2010
    Something that would be great to have would be to take a snapshot of the rating when an edit occurs, this would then allow admins to review the history of a page and see the impact of edits on the rating for the page. This could be done by including it in the summary information for the edit or via a dashboard. ex: if I create an article and 10 people vote it as bad I then make changes and 5 people vote it as good, it will still have a high percentage of negative feedback on the article even though the change that was made solicited the 5 positive ratings.
    Posted 11:05, 20 Apr 2010
    quick note: service should expose "top rated pages in hierarchy ____"
    Posted 10:49, 3 May 2010
    Can the user vote only once per page, or is it once per page version. In other words, if the page is updated and changed, then can a user who has already voted then vote again? Seems like that you should be able to vote again, if the page has been changed by someone else.
    Posted 05:05, 26 May 2010
    @chcantre brings up a good point. Imagine a page starts off very useless (thus many users rate it down) that grows into a very useful page. The new, useful page is still buried in the search results (assuming the rating affects search results) and the information becomes hard to find.
    I can't think of any solution to this problem other than a rating system that consists of more than rate-up and rate-down. Perhaps a scoring system that takes into account of the vote, voter's personal rating (See @carles.coll's post), visits, etc. Though this would be much more work than should be spent on v1. :P
    However critical this comment may sound, I do like the concept. :D
    Posted 12:21, 10 Jun 2010
    @blakeh
    Hey Blake, long time no... something!

    I would like to see the page rating data available in the page variable, and the current user's vote made available somewhere (not sure where to be honest). Having said that, I don't know how super-useful it would be, but it would make it easy to build one's own "find highest or lowest-rated pages" templates.

    Also, is there a way to control which pages have this enabled?
    Posted 12:07, 23 Jun 2010
    how can I remove the scoring ??
    Posted 11:47, 5 Aug 2010
    @marcmuylaert: in LocalSettings.php, add the line

    $wgDisabledDekiPlugins[] = 'page_content_rating';
    Posted 12:54, 6 Aug 2010
    Viewing 15 of 16 comments: view all
    You must login to post a comment.

    Copyright © 2011 MindTouch, Inc. Powered by