Content clustering

A method for clustering content is disclosed. The method reduces the likelihood that unrelated content is included in a cluster, allows users to more discover content and content is automatically curated. A collection of posts is associated with a common tag. A seed post is identified from the collection of posts. The collection of posts is grouped into a first cluster of posts based on the seed post and a first attribute. The collection of posts is grouped into a second cluster of posts based on the seed post and a second attribute. A preferred view is determined from at least one or more of: the first cluster and the second cluster. The preferred view is provided for display. Unrelated content includes topically unrelated posts, posts by users unrelated to a seed user, posts by users unrelated to the seed post in an activity graph.

BACKGROUND

The present disclosure relates to content clustering. More specifically, the present disclosure relates to the clustering of content posts on a social network service.

On microblogging and social network services, users often provide a metadata tag or “tag” to messages. One common tag notation is with the ‘#’ character followed by a string of alpha-numeric characters. A tag allows grouping of similarly tagged messages and helps users of microblogging or social network services to find content of a given topic.

Tags are often used in un-curated discussions to help route users to interesting content. Since tags are usually not controlled by a moderator, sometimes different content subject matter may inadvertently be labeled with the same tag. For instance, especially for homonyms, the tag ‘#ram’ may be applied to posts by computer hardware enthusiast discussing the latest advances in computer memory. The same tag ‘#ram’ may also be applied to posts by users discussing how durable and powerful their trucks are.

Tags are also sometimes used in conjunction with content rankings. Users can often affirm posts. By affirming a post, the post may be ranked higher in content rankings. Additionally, tags themselves sometimes may be ranked higher compared to other tags based on affirmations. Content posters sometimes may try to take advantage of highly ranked tags to get more viewership. This incentive to get more content viewers can cause different content subject matter to be labeled with the same tag and may make it more difficult to route users to the content they wish to consume.

SUMMARY

According to one innovative aspect of the subject matter described in this disclosure, a system includes a processor and a memory storing instructions that, when executed, cause the system to: identify a seed post from the collection of posts; group the collection of posts into a first cluster of posts based on the seed post and a first attribute; group the collection of posts into a second cluster of posts based on the seed post and a second attribute; determine a preferred view from at least one or more of: the first cluster and the second cluster; and provide for display the preferred view.

In general, another innovative aspect of the subject matter described in this disclosure may be embodied in methods that include: associating a collection of posts with a common tag; identifying a seed post from the collection of posts; grouping the collection of posts into a first cluster of posts based on the seed post and a first attribute; grouping the collection of posts into a second cluster of posts based on the seed post and a second attribute; determining a preferred view from at least one or more of: the first cluster and the second cluster; and providing for display the preferred view.

Other aspects include corresponding methods, systems, apparatus and computer program products for these and other innovative aspects.

These and other implementations may each optionally include one or more of the following features. For instance, the features may further include: grouping the collection of posts into a third cluster of posts based on the seed post and a third attribute. The first cluster, the second cluster and/or the third cluster may be provided for display. For instance, the features may further include: identifying a new seed post from the collection of posts, grouping the collection of posts into a third cluster of posts based on the new seed post and the first attribute; and grouping the collection of posts into a fourth cluster of posts based on the new seed post and the second attribute. For instance, the features may further include identifying a topic entity of the seed post, and grouping the collection of posts into a topical cluster of posts based on whether content of a post is associated with the topic entity. For instance, the features may further include identifying terms semantically related with a keyword; identifying a topic entity may include extracting the keyword from the seed post; the content of a post may be associated with the topic entity if the post includes terms semantically related with the keyword. For instance, the features may further include identifying an activity network for the seed post based on actions performed by one or more users on a social networking system to the seed post, and grouping the collection of posts into an activity cluster of posts based on the activity network. For instance, the features may further include that the activity network is based on one or more of the following actions on the social networking system, affirming a post, commenting on a post, and re-posting an existing post. For instance, the features may further include determining a user who posted the seed post, identifying explicit connections to the user on a social networking system, and grouping the collection of posts into a social cluster of posts based on the explicit connections to the user. For instance, the features may further include receiving a selection of posts to be acted upon by a user; and ranking posts presented in a content stream based on at least one or more of a topical cluster, an activity cluster, and a social cluster.

The present disclosure may be particularly advantageous in a number of respects. First, the system may allow users to more readily discover interesting content. Second, the clustering method reduces the likelihood that unrelated content is included in the cluster. Third, the method can perform accurate curation of content without need for any human user intervention. Moreover, users of microblogging and social networking service may have an increased level enjoyment and use and may spend more time producing content for such sites.

DETAILED DESCRIPTION

A system and method for clustering posts is described below. In some instances, content may be posts on a site or social networking service. In some instances, posts may be associated with one or more tags.

FIG. 1is a flowchart of an example method100for clustering content. In some implementations, the method100for clustering content may be performed by a content clustering application904. An example implementation of a content clustering application904is described in more detail below with reference toFIGS. 9 and 10. The content cluster application904includes a controller1002, a topical module1004, an activity module1006, a social module1008, a ranking module1010, a recluster module1012and a graphical user interface (GUI) module1014.

In some instances, the controller1002associates102a collection of posts with a common tag. For example, when a post is made with a tag, the controller1002may store the post and tag in a database. The database may have an index for tags and each tag may reference one or more posts. Likewise, each post may be referenced by any number of tags. Thus, in this example implementation, when the database is then queried with a given tag, the resultant collection of posts associated with the given tag may be returned.

In some implementations, the controller1002may also identify104a seed post from the collection of posts. In one example, the seed post may be selected by a user through the GUI module1014and communicated to the controller1002. In some implementations, the seed post may be identified by being unassociated with any existing posts or may be posted by a given user. A seed post may be used by the method100as a starting point to analyze the collection of posts. As discussed below with greater detail, posts may be related by several different attributes or parameters. The seed post may be used as a point at which to begin processing these attributes or parameters and grouping clusters of posts together based on one or more attributes.

In some implementations, the seed post may be changed by identifying a new seed post. In doing so, the method100may be executed against the collection of posts from a different starting point. Reference made herein to “reclustering” or “reseeding” refers to running the implementations discussed herein against a newly identified seed post. In some examples, a user may explicitly select a new seed post using the GUI module1014. In some examples, the new seed may be implicitly selected by the user based on actions the user takes to indicate approval or disapproval of various posts. In some examples, a new seed may be identified by trends amongst a group or users or all of the users on a system.

The collection of posts is grouped106into a first cluster of posts based on the seed post and a first attribute. In some instances, the topical module1004may perform this grouping. In some implementations, the activity module1006and/or the social module1008may perform this grouping. The topical module1004, the activity module1006and the social module1008may group clusters based on different attributes. These modules are discussed with greater detail below with reference toFIG. 10. The collection of posts is also grouped108into a second cluster of posts based on the seed post and a second attribute. Likewise, this grouping may be performed by the topical module1004, the activity module1006, the social module1008and/or other attributes discernable in the collection of posts. In some implementations, the grouping of the first cluster is unique from the grouping of the second cluster. For example, the topical module1004may group the first cluster and the activity module1006may group the second cluster.

In some implementations, the GUI module1014or the ranking module1010may receive input from the user to determine110a preferred view. The preferred view may include the first cluster and/or the second cluster. Determining the preferred view may include ranking posts in a content stream based on the clustering. In one example, clusters that are tightly formed may be ranked higher. Further, in some instances, the GUI module1014may provide112the preferred view for display. In some instances, the GUI module1014cooperates with a display device to cause the preferred view to be displayed. Discussion of the GUI module1014is discussed in more detail below with reference toFIG. 10and through example user interfaces inFIGS. 11 and 12. In some implementations, the groupings of collections may be analyzed and presentation conditioned on the grouping having more than a threshold number of post or presentation limited to presenting a number of post equal to or less than a threshold. For example, based on the platform in which the user is viewing the cluster of posts, the clusters maybe sized to the desktop presentation or presentation on a mobile device.

FIG. 2is a flowchart of an example method200for re-clustering content based on a new seed post. As discussed above, in some implementations the controller module1002identifies202a seed post. In one example, the seed post may be associated with a collection of posts with a common tag. The content clustering application904may group204the collection of posts into one or more clusters based on the seed post and one or more attributes. The content clustering application904may use the topical module1004, the activity module1006and/or the social module1008to group the collection of posts into one or more clusters. The GUI module1014may receive206input about the posts. The recluster module1012responsive to the received input identifies208a new seed post and determines210whether to initiate running the method200with the new seed post. If so, the method200, use the new seed post and continues to block204using the new seed post. If not, the method200continues. Thus, the technology may include grouping the collection of posts into a third cluster of posts based on the seed post and a third attribute. Moreover a preferred view may be determined from the first cluster, the second cluster and the third cluster. In this way, the method200may include identifying a new seed post from the collection of posts, grouping the collection of posts into a third cluster of posts based on the new seed post and the first attribute, and grouping the collection of posts into a fourth cluster of posts based on the new seed post and the second attribute. This process may be repeated any number of times to create different clusters.

FIG. 3is a flowchart of an example method300for clustering content based on semantically related keywords. More specifically, the method300groups a collection of posts into a topical cluster of posts based on whether content of a post is associated with the topic entity. To do so, the method300identifies a topic entity of a seed post. In particular, a keyword is extracted302from a seed post. In one implementation, the topical module1004scans the text of a post to identify meaningful words to use as keywords. In one example, commonly used words (e.g., ‘the’, ‘be’, ‘to’, ‘of’, ‘and’, etc.) that may not add significant contextual information are not included as keywords.

Once a keyword has been identified, a term semantically related with the keyword is identified304. For instance, the keyword ‘ram’ might be semantically related to ‘DRAM’, ‘MB’, ‘ROM’, ‘NAND’, ‘Hemi’, ‘Dodge®’, etc. In some implementations, a keyword may be semantically related to a term where the semantic closeness between the keyword and term is above a threshold. Additionally, in some instances, identifying304semantically related terms may include finding second-order semantically related terms. For example, ‘Hemi’ may be a term semantically related to ‘ram’, but ‘torque’ may also be a term semantically related to ‘Hemi’. Thus, in this example, the term ‘torque’ is a second-order semantically related term to the keyword ‘ram’. Thus, once a semantically related term is identified304, the method300determines whether there are more306semantically related terms. In this way, the method300includes an iterative search for terms semantically related with the keyword. Moreover, while the example method300refers to a single keyword, it should be noted that there may be two or more keywords for a given seed post, or in some instances, a seed post may have no extractable keywords. Further, there may be key word pairs or other combinations that are used as semantically related terms. In this way, one or more topic entities of the seed post may be identified.

The collection of posts is grouped into a topical cluster of posts based on whether content of a post is associated with the topic entity. To do so, a post from the collection of posts is selected308. The method300then determines whether the selected post includes310a semantically related term. For instance, the text of the post may be scanned to identify whether the post includes a semantically related term. If the post does include a semantically related term, the post is added312to a topical cluster. Otherwise, if the post does not include a semantically related term, the post is not added to the topical cluster. Regardless of whether block312is performed, the method300then determines314whether there are more posts in the collection of posts to process. If there are, another post is selected308from the collection of posts and processed accordingly. If not the method300continues.

FIG. 4is a flowchart of an example method400clustering of content based on activity. The method400includes identifying402an activity network for the seed post based on actions performed by one or more users on a social networking system to the seed post. The activity network may be based on a variety of actions on the social networking system. For instance, a user affirming a post, commenting on a post, and/or re-posting an existing post on the social network may contribute to the activity network. More specifically, information may be stored when a user performs an activity and then later retrieved to form an activity network. For example, when a user may make a comment on a post, information may be stored including the text of the comment, information about the user making the comment, the relationship between the post and the comment (e.g., in a threaded conversation the comment is a reply to the post), information about the user who made the post, etc. In retrieving the stored information, the activity graph may include the post and comment as nodes in the graph with an edge connecting the post and the comment. In some implementations, the edge connecting the post and the comment may be unidirectional or bi-directional. In a unidirectional graph, the edge may be directed from the post to the comment to indicate that the comment came after, or was in reply to, the post. In some examples, directional edges may be used to indicate the node that was acted upon and the node that was created by the action.

The method400also includes grouping404the collection of posts in to an activity cluster of posts based on the activity network. In one implementation, the method400is performed by the activity module1006discussed in detail with reference toFIG. 10below. In some instances, the grouping106the collection of posts into a first cluster of posts based on the seed post and a first attribute may include the method400. Likewise, the grouping108the collection of posts into a second cluster of posts based on the seed post and a second attribute may include the method400. In some implementations, the grouping106of the first cluster and the grouping108of the second cluster may include methods that are different. For example, the grouping106of the first cluster may include the method300while the grouping108of the second cluster may include the method400. Areas of the activity graph that form a more connected area of the graph may be grouped together. As a brief example, user Adam makes a post on which Bill, Cory and Dominque all make comments. Adam and Cory then comment on Bill's comment and Dominque comments on Adam's comment. Meanwhile, user William merely affirms the post and no further actions are taken by other users regarding William's affirming the post. Thus in some implementations, Adam, Bill, Cory and Dominque's actions may form a cluster that does not include William's isolated affirmation. As another example, a news post that discusses deployment of a fiber optic network within a community may quickly form several clusters in an activity graph. One cluster may form from by those interested in policy making who may be eager to tout the benefits that the community will enjoy with the fiber optic network. Another cluster may form from those interested in discussing the technical aspects of the fiber optic deployment. Yet another cluster may form that focuses on pricing models or availability.

FIG. 5is a flowchart of an example method500for social clustering of content. The method500includes determining502a user who posted the seed post, and identifying504explicit connections to the user on a social networking system. A social network is any type of social structure where the users are connected by a common feature. The common feature includes friendship, family, work, an interest, etc. The common features are provided by one or more social networking systems including explicitly-defined relationships and relationships implied by social connections with other users, where the relationships are defined in a social graph. The social graph is a mapping of all users in a social network and how they are related to each other. For example, when a first user follows a second user, the relationship is a first-degree relationship. If the second user follows a third user that the first user does not follow, the first user has a second-degree relationship with the third user. The social graph may have nodes representing users in the social networking system with edges connecting the nodes representing explicit social connections between the nodes representing the users in the social networking system. In some examples, the user who posted the seed post is determined when the post is made to the social networking system. The explicit connection may then be identified by looking up the node representing the user who posted the seed post and identifying edges from that node representing the user to other nodes representing explicit social connections with others to the user who posted the seed post. In some cases, the explicit social connections used in clustering may only include first-degree connections. In other cases, multi-degree connections may be used in clustering. In some examples, the degree of connection between users may be used in grouping the collection of posts into a social cluster. Groups of posts made by users that have lower-degree connections may be weighted as forming a tighter collection of posts, and therefore may be more likely to form a social cluster. In further examples, the degree of connection between users may be used by the ranking module1010to rank a collection of posts. In one instance, clusters that are tightly formed may be ranked higher.

The method500then groups506the collection of posts in to a social cluster of posts based on the explicit connections to the user, degree of relationship, type of relationship and other social factors. Areas of the social graph that form a more connected area of the graph may be grouped together. As a brief example, user Allen may be explicitly connected to Brick, Cynthia and Drexel. Cynthia may be explicitly connected Brick and Drexel while Brick is explicitly connected to Drexel. Further, multiple posts made by Allen, Brick, Cynthia and Drexel have a common tag. Thus in some implementations, Allen, Brick, Cynthia and Drexel's explicit social connection may be used to form a cluster from a group of posts that have a common tag. For instance, each post that was made by Allen, Brick, Cynthia or Drexel may be added to a social cluster based on the explicit connection between Allen, Brick, Cynthia and Drexel. In other words, the explicit connections may be used alone or in combination with other information to form clusters.

FIG. 6is a graphic representation of social clustering of content. A graphic representation of a collection of posts600is shown. The collection of posts600are processed602into various clusters612,622and632according to the method described above. An un-clustered group650of posts is also shown which includes posts that are not grouped into any of the various clusters612,622and632. While the graphic representation inFIG. 6appears to depict posts being grouped into one of the various clusters612,622and632, or into the un-clustered group650, it should be noted that in some implementations a given post may be included in several clusters.

A seed post604is shown which was posted to a social networking system by a seed user606. As depicted, the seed user606is explicitly connected on the social networking system to other users as indicated by one or more lines connecting the seed user to several groups of users610,620and630. Within the groups of users610,620and630, users may be explicitly connected to one another on the social networking system. Thus, the group of users610may be connected with one another in such a way to form a group of users. For example, every user in the group610may be third-degree connected or less with other users in the group610.

A user in the groups of users610,620and630may post responses to the seed post604. For example, a user in the group of users610may respond to the seed post604. In this way, the group of users610may post to the social networking system a subset612of the collection of posts600. This subset612of the collection of posts600may be formed through grouping the collection of posts into a social cluster of posts based on the explicit connection to the users in the group of user610. Thus more generally, through the processing602of the collection of posts600, a user who posted the seed post is determined, explicit connection to the user on a social networking system are identified, and the collection of posts are grouped into social clusters of posts612,622and632. In processing602the collection of posts600, there may be a subset650of the collection of posts that do not cluster with any of the clusters of posts612,622and632. This subset of posts that do not cluster with any of the clusters of posts612,622and632may be referred to as an un-clustered group650.

FIG. 7is a graphic representation of topical clustering of content. The collection of posts700are processed702into various clusters712and722. An un-clustered group750is also shown which includes posts that are not grouped into any of the various cluster712and722. While the graphic representation inFIG. 7appears to depict posts being grouped into one of the various clusters712and722, or into the un-clustered group750, it should be noted that in some implementations a given post may be included in several clusters.

A seed post704is shown which includes various topic entities706and708. Thus, part of the processing702of the collection of posts into a cluster of posts includes identifying the topic entities706and708of the seed post704. Another part of the processing702of the collection of posts into a cluster of posts includes grouping the collection of posts into topical clusters712and722of posts based on whether content of a post is associated with the topic entities706and708. For example, the seed post704may include the tag ‘#ram’ and may have a first topic entity706that is ‘ memory’ and a second topic entity708that is ‘truck’. In this way, the topical cluster712may be based on the first topic entity706—‘memory’ while the other topical cluster722may be based on the second topic entity708—‘truck’.

In some implementations, identifying topic entities706and708includes extracting a keyword from the seed post702and identifying terms semantically related with the keyword. Thus, in the depicted figures, semantically related keywords are connected with lines as shown in710and720. In some implementations, the content of a post is associated with the topic entity if the post includes terms semantically related with the keyword.

FIG. 8is a graphic representation of activity clustering of content. A graphic representation of a collection of posts800is shown. The collection of posts800are processed802into various clusters822,832and842. An un-clustered group850is also shown which includes posts that are not grouped into any of the various cluster822,832and842. While the graphic representation inFIG. 8appears to depict posts being grouped into one of the various clusters822,832and842, or into the un-clustered group850, it should be noted that in some implementations a given post may be included in several clusters.

A seed post804is shown which was posted to a social networking system. As depicted, the seed post804may include an activity network associated with the seed post804based on actions806,808and810performed by one or more users on a social networking system to the seed post804. User with groups of actions may form activity networks820,830and840. For example, the activity network may be formed by users affirming a post, commenting on a post, and re-posting an existing post. Sometimes these actions of users affirming a post, commenting on a post, and re-posting an existing post may be performed against the seed post804while other times they may be performed against responses to the seed post, or to other posts in the collection of posts800.

Thus through the processing802of the collection of posts800, an activity network for the seed post is identified based on actions performed by one or more users on a social networking system to the seed post804, and the collection of posts are grouped into activity clusters of posts822,832and842based on the activity network. In processing802the collection of posts800, there may be a subset850of the collection of posts that do not cluster with any of the clusters of posts822,832and842. This subset of posts that do not cluster with any of the clusters of posts822,832and842may be referred to as an un-clustered group850.

FIG. 9is a block diagram illustrating an example system900for content clustering. The illustrated system900includes client devices912a. . .912nthat can be accessed by users916a. . .916n, a social network server902and a third-party server908. InFIG. 9and the remaining figures, a letter after a reference number, e.g., “912a,” represents a reference to the element having that particular reference number. A reference number in the text without a following letter, e.g., “912,” represents a general reference to instances of the element bearing that reference number. In the illustrated implementation, these entities of the system900are communicatively coupled via a network906.

The client devices912a,912ninFIG. 9are used by way of example. WhileFIG. 9illustrates two client devices912aand912n, the present disclosure applies to a system architecture having one or more client devices912. Furthermore, althoughFIG. 9illustrates one network906coupled to the client devices912, the social network server902and the third-party server908, in practice one or more networks906can be connected to these entities.

In some instances, the content clustering application904amay be operable on the social network server902, which is coupled to the network906. The social network server902can be a hardware server that includes a processor, a memory and network communication capabilities. In some implementations, the social network server902sends and receives data to and from one or more of the client devices912a,912nand the third-party server908via the network906. The social network server902also includes a storage device918and a social network application (not shown) that can be part of the content clustering application904aor a standalone application.

The storage device918stores a social graph that includes the relationship between people in a social network. In some instance, the storage device918stores data describing one or more social graphs. A social graph may be a representation of connections between users in a social network. In some instances, the storage device918stores data describing explicit and implicit social connections of a social network. In some implementations, an implicit social connection is formed where actions are performed by a user on a social networking system to a seed post. An activity network is formed through one or more implicit social connections. For example, when a user A affirms a seed post provided by user B, user B may form an implicit social connection with user A. If a user C then comments on user B's affirmation of the seed post, another implicit social connection may be formed between user B and user C. Additionally an implicit social connection may be formed between user A and user C. The implicit social connections between user A, user B and user C may form an activity network.

In some instances, the storage device918stores post and topic entities of posts and may include a database. In some implementations, a topic entity may be extracted from the text of posts. In some instances, semantically related words may also be identified to generate further terms in a topic entity. In some instances, the storage device918stores tags associated with posts.

Furthermore, the social network server902may be representative of one social network and there may be multiple social networks coupled to the network906, each having its own server, application and social graph. For example, a first social network may be more directed to business networking, a second may be more directed to or centered on academics, a third may be more directed to local business, a fourth may be directed to dating and others may be of general interest or a specific focus.

In some instances, the content clustering application904bmay be stored on a third-party server908, which is connected to the network906. In some implementations, the third-party server908can be a hardware server that includes a processor, a memory and network communication capabilities. The third-party server908sends and receives data to and from other entities of the system900via the network906. In some instances the third-party server908includes a website module910for generating a website. In this example, the content clustering application904bcould be an application programming interface (API) for requesting information from the social network server902about content clusters. The website module910incorporates the social information into the website. WhileFIG. 9includes one third-party server908, the system900may include one or more third-party servers908.

In some instances, the content clustering application904cmay be stored on a client device912a, which is connected to the network906. In some implementations, the client device912a,912nmay be a computing device that includes a memory and a processor, for example a laptop computer, a desktop computer, a tablet computer, a mobile telephone, a personal digital assistant (PDA), a mobile email device, a portable game player, a portable music player, a television with one or more processors embedded therein or coupled thereto or other electronic device capable of accessing a network906. In some instances, the client device912aincludes a browser914for accessing online services. In the illustrated implementation, the user916ainteracts with the client device912a. The client device912nis communicatively coupled to the network906. The user916ninteracts with the client device912n. In some instances, the content clustering application904cacts in part as a thin-client application that may be stored on the client device912a,912nand in part as components that may be stored on the social network server902.

The content clustering application904can be code and routines for identifying and providing people in common to a user in a social network. In some instances, the content clustering application904can be implemented using hardware including a field-programmable gate array (FPGA) or an application-specific integrated circuit (ASIC). In some other instances, the content clustering application904can be implemented using a combination of hardware and software. In some instances, the content clustering application904may be stored in a combination of the devices and servers, or in one of the devices or servers.

The network906can be a conventional type, wired or wireless, and may have numerous different configurations including a star configuration, token ring configuration or other configurations. Furthermore, the network906may include a local area network (LAN), a wide area network (WAN) (e.g., the Internet), and/or other interconnected data paths across which multiple devices may communicate. In some instances, the network906may be a peer-to-peer network. The network906may also be coupled to or includes portions of a telecommunications network for sending data in a variety of different communication protocols. In some instances, the network906includes Bluetooth communication networks or a cellular communications network for sending and receiving data including via short messaging service (SMS), multimedia messaging service (MMS), hypertext transfer protocol (HTTP), direct data connection, WAP, email, etc.

FIG. 10is a block diagram illustrating an example of a content clustering application904.FIG. 10is a block diagram of a computing device1000that includes a content clustering application904, a processor1018, a memory1016and a communication unit1020according to some examples. In some implementations, the computing device1000additionally includes a storage device918. The components of the computing device1000are communicatively coupled by a bus1040. In some instances, the computing device1000can be one of a social network server902, a client device912and a third-party server908.

The processor1018includes an arithmetic logic unit, a microprocessor, a general purpose controller or some other processor array to perform computations and provide electronic display signals to a display device. The processor1018is coupled to the bus1040for communication with the other components. Processor1018processes data signals and may include various computing architectures including a complex instruction set computer (CISC) architecture, a reduced instruction set computer (RISC) architecture, or an architecture implementing a combination of instruction sets. AlthoughFIG. 10includes a single processor1018, multiple processors1018may be included. Other processors, operating systems, sensors, displays and physical configurations are possible.

The memory1016stores instructions and/or data that may be executed by the processor1018. The memory1016is coupled to the bus1040for communication with the other components. The instructions and/or data may include code for performing the techniques described herein. The memory1016may be a dynamic random access memory (DRAM) device, a static random access memory (SRAM) device, flash memory or some other memory device. In some instances, the memory1016also includes a non-volatile memory or similar permanent storage device and media including a hard disk drive, a floppy disk drive, a CD-ROM device, a DVD-ROM device, a DVD-RAM device, a DVD-RW device, a flash memory device, or some other mass storage device for storing information on a more permanent basis.

The communication unit1020transmits and receives data to and from at least one of the client device912, the third-party server908and the social network server902depending upon where the content clustering application904may be stored. The communication unit1020is coupled to the bus1040. In some instances, the communication unit1020includes a port for direct physical connection to the network906or to another communication channel. For example, the communication unit1020includes a USB, SD, CAT-5 or similar port for wired communication with the client device912. In some instances, the communication unit1020includes a wireless transceiver for exchanging data with the client device912or other communication channels using one or more wireless communication methods, including IEEE 802.11, IEEE 802.16, BLUETOOTH® or another suitable wireless communication method.

In some instances, the communication unit1020includes a cellular communications transceiver for sending and receiving data over a cellular communications network including via short messaging service (SMS), multimedia messaging service (MMS), hypertext transfer protocol (HTTP), direct data connection, WAP, e-mail or another suitable type of electronic communication. In some instances, the communication unit1020includes a wired port and a wireless transceiver. The communication unit1020also provides other conventional connections to the network906for distribution of files and/or media objects using standard network protocols including TCP/IP, HTTP, HTTPS and SMTP, etc.

The storage device918can be a non-transitory memory that stores data for providing the functionality described herein. The storage device918may be a dynamic random access memory (DRAM) device, a static random access memory (SRAM) device, flash memory or some other memory devices. In some instances, the storage device918also includes a non-volatile memory or similar permanent storage device and media including a hard disk drive, a floppy disk drive, a CD-ROM device, a DVD-ROM device, a DVD-RAM device, a DVD-RW device, a flash memory device, or some other mass storage device for storing information on a more permanent basis.

In some instances, the storage device918stores data describing one or more social graphs. A social graph may be a representation of connections between users in a social network. In some instances, the storage device918stores data describing explicit and implicit social connections of a social network. In some implementations, an implicit social connection is formed where actions are performed by a user on a social networking system to a seed post. An activity network is formed through one or more implicit social connections. For example, when a user A affirms a seed post provided by user B, user B may form an implicit social connection with user A. If a user C then comments on user B's affirmation of the seed post, another implicit social connection may be formed between user B and user C. Additionally an implicit social connection may be formed between user A and user C. The implicit social connections between user A, user B and user C may form an activity network.

In some instances, the storage device918stores post and topic entities of posts. In some implementations, a topic entity may be extracted from the text of posts. In some instances, semantically related words may also be identified to generate further terms in a topic entity. In some instances, the storage device918stores tags associated with posts.

In the illustrated implementation shown inFIG. 10, the content clustering application904includes a controller1002, a topical module1004, an activity module1006, a social module1008, a ranking module1010, a recluster module1012and a graphical user interface (GUI) module1014. These components of the content clustering application904are communicatively coupled to each other via the bus1040.

The controller1002can be software including routines for handling communications between the content clustering application904and other components of the computing device1000. In some instances, the controller1002can be a set of instructions executable by the processor1018to provide the functionality described below for handling communications between the content clustering application904and other components of the computing device1000. In some other instances, the controller1002can be stored in the memory1016of the computing device1000and can be accessible and executable by the processor1018. The controller1002may be adapted for cooperation and communication with the processor1018and other components of the computing device1000via the bus1040.

The controller1002sends and receives data, via the communication unit1020, to and from one or more of a client device912, a social network server902and a third-party server908. For example, the controller1002receives from a client device912, via the communication unit1020, a request for content clusters, identifies which types of content clusters are to be generated and sends the content cluster request to the topical module1004, the activity module1006and/or the social module1008. In some examples, the controller1002receives graphical data for providing a user interface to a user from the GUI module1014and sends the graphical data to a client device912, causing the client device912to provide the user interface to the user or present the user interface.

In some instances, the controller1002receives data from components of the content clustering application904and stores the data in the storage device918. For example, the controller1002may receive tag data, text and other media data for post. In another example, the controller1002may receive data describing topic entities from the topical module1004and stores the data in the storage device918.

In some instances, the controller1002retrieves data from the storage device918and sends the data to components of the content clustering application904. For example, the controller1002retrieves data describing social network connections, e.g. a social graph, from the storage device918and sends the data to the social module1008to create a social cluster. In some implementations, the controller1002may retrieve social network connections and topic entities for posts from the storage device918. The social network connections together with their corresponding privacy status may be sent to the topical module1004.

In some instances, the controller1002generates a request for grouping a collection of posts into a first cluster of posts based on the seed post and a first attribute and sends the request to one of the topical module1004, the activity module1006and the social module1008. For example, when a topical cluster is requested, the controller sends the request to the topical module1004. In some implementations, the controller1002may itself identify a seed post from the collection of posts and associate a collection of posts with a common tag. In other implementations, the collection of posts may be associated with a common tag in another module. In some instances, the topical module1004may identify a topic entity of the seed post and group the collection of posts into a topical cluster of posts based on whether content of a post is associated with the topic entity.

The topical module1004can be software including routines for clustering content into topical clusters. In some instances, the topical module1004can be a set of instructions executable by the processor1018to provide the functionality described herein for clustering content into topical clusters. In some other instances, the topical module1004can be stored in the memory1016of the computing device1000and can be accessible and executable by the processor1018. The topical module1004may be adapted for cooperation and communication with the processor1018and other components of the computing device1000via the bus1040.

In some instances, the topical module1004receives, from the controller1002, a request to group a collection of posts into a topical cluster. In some instances, the topical module1004also receives, from the controller1002, a collection of posts associated with a common tag. The topical module1004identifies one or more topic entities of the seed post and groups the collection of posts into a topical cluster of posts based on whether content of a posts is associated with the topic entity. For example, the topical module1004may scan the text of the seed post and extract keywords from the seed post. The topical module1004may then identify semantically related words with the extracted keywords. In one implementation, where there are two or more extracted keywords, the topical module1004may retrieve from the storage device918terms that are semantically related to a first keyword. The storage device918may include an indexed collection of keywords and terms. The topical module1004may then retrieve from the storage device terms that are semantically related to the terms that are semantically related to the keyword. The same process may be performed with a second keyword. All of the terms semantically related to the first keyword, either directly or by way of a semantically related term, may then be intersected with the terms semantically related to the second keyword.

The activity module1006can be software including routines for clustering content into activity clusters. In some instances, the activity module1006can be a set of instructions executable by the processor1018to provide the functionality described below for clustering content into activity clusters. In some other instances, the activity module1006can be stored in the memory1016of the computing device1000and can be accessible and executable by the processor1018. The activity module1006may be adapted for cooperation and communication with the processor1018and other components of the computing device1000via the bus1040.

In some instances, the activity module1006receives, from the controller1002, a request to group a collection of posts into an activity cluster. In some instances, the activity module1006also receives, from the controller1002, a collection of posts associated with a common tag. The activity module1006identifies an activity network for the seed post and groups the collection of posts into an activity cluster of posts based on the activity network. An activity network us based on actions performed by one or more users on a social networking system to the seed post.

The social module1008can be software including routines for clustering content into social clusters. In some instances, the social module1008can be a set of instructions executable by the processor1018to provide the functionality described below for clustering content into social clusters. In some other instances, the social module1008can be stored in the memory1016of the computing device1000and can be accessible and executable by the processor1018. The social module1008may be adapted for cooperation and communication with the processor1018and other components of the computing device1000via the bus1040.

In some instances, the social module1008receives, from the controller1002, a request to group a collection of posts into a social cluster. In some instances, the social module1008also receives, from the controller1002, a collection of posts associated with a common tag. The social module1008identifies a seed user from the user who posted the seed post. For example, the social module1008may query a database stored on the storage device918for the user associated with posting the seed post. The social module1008may then identify explicit connection to the user on a social networking system. For example. The social module1008may query a social network graph directly or may request through the controller the information from an external system. The collection of posts may then be grouped into a social cluster of posts based on the explicit connections to the seed user.

The ranking module1010can be software including routines for clustering content. In some instances, the ranking module1010can be a set of instructions executable by the processor1018to provide the functionality described below for r clusters. In some other instances, the ranking module1010can be stored in the memory1016of the computing device1000and can be accessible and executable by the processor1018. The ranking module1010may be adapted for cooperation and communication with the processor1018and other components of the computing device1000via the bus1040.

The ranking module1010may rank posts in a content stream based on the clustering. For example, clusters that are tightly formed may be ranked higher. In another example, a social cluster may receive preference by a user and thereby posts in a social cluster may be ranked higher. The ranking module1010may receive a collection of posts from the controller and clustering information. The ranking module1010may then rank the collection of posts for a presentation in a content stream and the results may be returned to the controller1002. In some instances, the controller1002may then pass the content stream (e.g. the ranked collection of posts) to the graphical user interface (GUI) module1014for display to a user.

The recluster module1012can be software including routines for clustering content. In some instances, the social module1008can be a set of instructions executable by the processor1018to provide the functionality described below for reclustering content. In some other instances, the social module1008can be stored in the memory1016of the computing device1000and can be accessible and executable by the processor1018. The social module1008may be adapted for cooperation and communication with the processor1018and other components of the computing device1000via the bus1040.

The recluster module1012may receive a selection for a new seed post from the GUI module1014. The recluster module1012may also receive a collection of posts with a common tag from the controller1002and first attribute to group the collection of posts with. In some implementations, the recluster module1012may then invoke execution of the topical module1004, the activity module1006and/or the social module1008as appropriate. In some instances, the recluster module1012may provide the topical module1004, the activity module1006and/or the social module the seed post and the collection of posts with a common tag. In other implementations, the controller1002may handle all or some of the aforementioned data provided to the topical module1004, the activity module1006and/or the social module from the recluster module1012.

The GUI module1014can be software including routines for generating graphical data for providing user interfaces to users. In some instances, the GUI module1014can be a set of instructions executable by the processor1018to provide the functionality described below for generating graphical data for providing user interfaces. In some other instances, the GUI module1014can be stored in the memory1016of the computing device1000and can be accessible and executable by the processor1018. The GUI module1014may be adapted for cooperation and communication with the processor1018and other components of the computing device1000via the bus1040.

In some instances, the GUI module1014receives, from the controller module1002or from the ranking module1010, a cluster. In some instances, the GUI module1014receives, from the ranking module1010a content stream according to an order provided by the ranking module. In some instances, the GUI module1014also receives input from user. For instance, the user may select a post to be acted upon using the GUI module1014(e.g. read for later, made the new seed post, etc.). The GUI module1014may also receive user instruction on how to visualize a cluster, or which types of clusters and/or posts to display and/or hide with the GUI module1014.

In some implementations, the GUI module1014generates graphical data for presenting people in common to the first user. Examples of the graphical user interface are shown inFIGS. 11 and 12.

FIG. 11is a graphic representation of an example user interface1100for visualizing clusters and displaying posts based on clusters. The user interface1100includes a cluster selection area1102with various cluster filters1110,1112and1114shown therein. The various cluster filters1110,1112and1114may be selectable. By selecting a cluster filter, for example, the cluster filter1110, the visualized clusters may be limited to the type of cluster that the cluster filter1110represents. For example, if the cluster filter1110represents an activity cluster filter, and if only the cluster filter1110is selected, only activity clusters would be shown. In some cases, the clusters are pre-generated and stored in a database. When the various cluster filters1110,1112and1114are selected, the system may query the database for the pre-generated clusters and display them with the user interface1100. In selecting a cluster filter1110,1112and1114the user may indicate to through the user interface1100that he wished to view a cluster of posts associated with the cluster filter1110,1112and1114. In some implementations, the cluster filters1110,1112and1114are color coded to indicate a particular type of cluster. For example, an activity cluster may be represented with a purple color while a topical cluster is represented with a green color. InFIG. 11, colors are represented by cross hatching. Thus, as represented inFIG. 11the activity cluster filter represented by the purple color may be represented by a cross hatching that from the top-left to the bottom-right of the cluster filter1110.

The user interface1100also includes a panel of posts1106. The panel of posts1106may be divided into columns1130,1132and1134. The columns1130,1132and1134may each correspond with a type of cluster in some implementations. In other implementations, the columns1130,1132and1134may correspond to all of the selected cluster filters1110,1112and1114and may be laid out to provide a comfortable viewing experience for the user of the interface1100.

In some implementations, users of the interface1100are presented with a visualization1104of the results of the clustering. The visualization1104gives the user a visual indication of the sizes of the clusters. In some instance, the panel of posts includes detailed presentation of the posts that have a common tag and are from people connected to seed identity. In the depicted example, there is a visualization1104of a social graphs with adjoining posts to visualize a social cluster. Other implementations include activity graphs to visualize activity clusters and topical graphs to visualize topical cluster. In some examples, each type of visualization (e.g. social graphs, activity graphs and topical graphs) offers a visualization of the clusters and detail views of representative or sample posts from each cluster.

FIG. 12is another graphic representation of an example user interface1200for displaying posts based on clusters. In this implementation, the user interface1200includes a cluster selection area1202with various cluster filters1210,1212and1214shown therein. The various cluster filters1210,1212and1214may be selectable. In selecting a cluster filter1210,1212and1214the user may indicate to through the user interface1200that he wishes to view a cluster of posts associated with the cluster filter1210,1212and1214. In some implementations, the cluster filters1210,1212and1214are color coded to indicate a particular type of cluster. For example, an activity cluster may be represented with a purple color while a topical cluster is represented with a green color. In some implementations, the user may select an un-grouped filter1216to indicate to the user interface1200that he wishes to view posts that were not grouped into any clusters. In some implementations, the user may select a mixed filter1208that indicates to the user interface that the user wishes to see all of the posts. For example, a user may select a post to use as a new seed. In another example, the user may select posts for later reading.

The user interface1200includes a list of posts1220. Each post may include a color code indicators1226corresponding to the type of cluster the post is grouped with. In some instances, the color coding shown at a post1204in the list of posts1220may match the color coding in the cluster selection area1202. In some implementations, the post1204may include a control1224to issue commands on the post1204. In some examples, commands may be issued to the post1204, the list of posts1220or may be issued to the collection of posts. In this way, a selection of posts to be acted upon by a user may be received by the user interface1200. In some examples, the user interface1200may include elements which may indicate which users are related to a post in response to selection, inspection or hover over. In some example, the list of posts1204may be ranked into a content stream based on a topical cluster, an activity cluster, and a social cluster. The posts1204may include an image, for example, a main photo in a photo post or an image from a site in a link post.

In the above description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the specification. It will be apparent, however, that the technology can be practiced without these specific details. In other instances, structures and devices are shown in block diagram form in order to avoid obscuring the description. For example, the present implementation is described in one implementation below primarily with reference to user interfaces and particular hardware. However, the specification applies to any type of computing device that can receive data and commands, and any peripheral devices providing services.

The specification can take the form of an entirely hardware implementation, an entirely software implementation or an implementation containing both hardware and software elements. In a preferred implementation, the specification is implemented in software, which includes but is not limited to firmware, resident software, microcode, etc.